Palabra con numeros

Iniciado por Jesusm1229, 28 Junio 2015, 02:17 AM

0 Miembros y 1 Visitante están viendo este tema.

Jesusm1229

Buenas chicos, cómo les va? Tengo un programa que puede parecer bastante tonto pero en el cual  me estoy ahogando. Dicho programa consiste en que, a partir de una frase pedida por el usuario, muestre las que están conformadas solamente por números, me explico: el usuario escribe: "la casa 23 es mas bonita que la 56 y la 5+6", el programa debe mostrar 23 y 56 pero no 5+6, puesto que tiene un operador aritmético.

La cuestión es que lo sé hacer, pero sin punteros, y precisamente me lo piden con ellos. Creen que me puedan explicar cómo hacerlo. No les estoy pidiendo que me hagan la tarea, sólo pido una ayuda, por favor. Les estaría muy agradecido.

engel lex

fuera de la tecnica especifica

para hacer esto te recomiendo...

toma el string, avanza hasta el primer espacio y guarda, a eso recorrelo, si tiene caracteres entre '0' y '9' unicamente es numero, lo guardas aparte, si tiene otro caracter, lo descartas, luego vas al siguiente espacio y repites hasta llegar al \0
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

crack81

#2
Bueno te dejo esta version hecha en c, el codigo no esta tan limpio como deberia pero te dara una idea en c++ es mucho mejor la implementacion

#include <stdio.h>



void fPalabrasNumeros2(char *palabra){
     
     char almacen[255];
     int entro=0;
     int i=0;
     int cont=0;
     for(i=1;i<strlen(palabra);i++){
             
        if((isdigit(palabra[i]) && isdigit(palabra[i+1])||(isdigit(palabra[i]) && isdigit(palabra[i-1]))
            || (isdigit(palabra[i]) && palabra[i+1]==' '&& palabra[i-1]==' '))){
          entro=1;                               
          almacen[cont]=palabra[i];
          almacen[cont+1]='\0';
          cont++;
        }
        else if(entro==1){
            entro=0;
            almacen[cont]=' ';
            almacen[cont+1]='\0';
            cont++; 
        }
     }
     
     printf("%s",almacen);
}

int main(int argc, char *argv[])
{
   
  char *palabra="la casa 23 es mas bonita que la 56 y la 5+6";
  fPalabrasNumeros2(palabra);
 
  getchar();
  return 0;
}




Edito:
te dejo otra opcion usando funciones como strcpy y strcat

#include <stdio.h>



void fPalabrasNumeros2(char *palabra){
     
     char almacen[255];
     int entro=0,i=0;
     char *x=malloc(sizeof(char));
     strcpy(almacen,"");
     
     for(i=1;i<strlen(palabra);i++){
             
        if((isdigit(palabra[i]) && isdigit(palabra[i+1])||(isdigit(palabra[i]) && isdigit(palabra[i-1]))
            || (isdigit(palabra[i]) && palabra[i+1]==' '&& palabra[i-1]==' '))){
          entro=1;                             
          *x=palabra[i];
          strcat(almacen,x);
        }
        else if(entro==1){
            entro=0;
            *x=' ';
            strcat(almacen,x);
        }
     }
     
     printf("%s",almacen);
     free(x);
}

int main(void)
{
   
  char *palabra="la casa 23 es mas bonita que la 56 y la 5+6";

 
  fPalabrasNumeros2(palabra);
 
  getchar();
  return 0;
}


Si C/C++ es el padre de los lenguajes entonces ASM es dios.

Jesusm1229

Buenas, gracias a ambos por su ayuda, fue muy util. Aunque hice el programa no es como lo necesitaba...

#include <iostream.h>
#include <conio.h>
#include <stdio.h>

void LeerFrase(char f[])
{cout<<"Ingrese una frase: ";
gets(f);
}

int ContArit(char f[])
{int i,cont;
  for(i=0, cont=0;f[i]!=NULL;i++)
if(f[i]=='*' || f[i]=='/' || f[i]=='+' || f[i]=='-'|| f[i]=='%')
cont ++;
return cont;
  }


void PalNum(char f[])
{int i;
  for(i=0;f[i]!=NULL;i++)
{if ((f[i]==48 || f[i]==49 || f[i]==50|| f[i]==51|| f[i]==52|| f[i]==53|| f[i]==54|| f[i]==55|| f[i]==56|| f[i]==57) && (f[i+1]==48 || f[i+1]==49 || f[i+1]==50|| f[i+1]==51|| f[i+1]==52|| f[i+1]==53|| f[i+1]==54|| f[i+1]==55|| f[i+1]==56|| f[i+1]==57)  || (f[i]==48 || f[i]==49 || f[i]==50|| f[i]==51|| f[i]==52|| f[i]==53|| f[i]==54|| f[i]==55|| f[i]==56|| f[i]==57) && (f[i-1]==48 || f[i-1]==49 || f[i-1]==50|| f[i-1]==51|| f[i-1]==52|| f[i-1]==53|| f[i-1]==54|| f[i-1]==55|| f[i-1]==56|| f[i-1]==57) || (f[i]==48 || f[i]==49 || f[i]==50|| f[i]==51|| f[i]==52|| f[i]==53|| f[i]==54|| f[i]==55|| f[i]==56|| f[i]==57) && (f[i+1]==32 || f[i+1]==32 || f[i+1]==32|| f[i+1]==32|| f[i+1]==32|| f[i+1]==32|| f[i+1]==32 || f[i+1]==32|| f[i+1]==32|| f[i+1]==32) && (f[i-1]==32 || f[i-1]==32 || f[i-1]==32|| f[i-1]==32|| f[i-1]==32|| f[i-1]==32|| f[i-1]==32|| f[i-1]==32|| f[i-1]==32|| f[i-1]==32))
cout<<f[i];
if(f[i]==32)
  cout<<" ";
   
  }}




void main()
{int i, cont;
char frase[50];
LeerFrase(frase);
cout<<"Los aritmeticos son: "<<ContArit(frase);
cout<<"\nLas palabras numericas son:"; PalNum(frase);
}


Funciona pero el codigo se ve engorroso y dificil de leer...

Jesusm1229

Cita de: engel lex en 28 Junio 2015, 02:45 AM
fuera de la tecnica especifica

para hacer esto te recomiendo...

toma el string, avanza hasta el primer espacio y guarda, a eso recorrelo, si tiene caracteres entre '0' y '9' unicamente es numero, lo guardas aparte, si tiene otro caracter, lo descartas, luego vas al siguiente espacio y repites hasta llegar al \0

el problema es cómo sé que son sólo numeros simplemente con un recorrido...