Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Jesusm1229 en 28 Junio 2015, 02:17 am



Título: Palabra con numeros
Publicado por: Jesusm1229 en 28 Junio 2015, 02:17 am
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.


Título: Re: Palabra con numeros
Publicado por: 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


Título: Re: Palabra con numeros
Publicado por: crack81 en 28 Junio 2015, 05:41 am
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

Código
  1. #include <stdio.h>
  2.  
  3.  
  4.  
  5. void fPalabrasNumeros2(char *palabra){
  6.  
  7.     char almacen[255];
  8.     int entro=0;
  9.     int i=0;
  10.     int cont=0;
  11.     for(i=1;i<strlen(palabra);i++){
  12.  
  13.        if((isdigit(palabra[i]) && isdigit(palabra[i+1])||(isdigit(palabra[i]) && isdigit(palabra[i-1]))
  14.            || (isdigit(palabra[i]) && palabra[i+1]==' '&& palabra[i-1]==' '))){
  15.          entro=1;                              
  16.          almacen[cont]=palabra[i];
  17.          almacen[cont+1]='\0';
  18.          cont++;
  19.        }
  20.        else if(entro==1){
  21.            entro=0;
  22.            almacen[cont]=' ';
  23.            almacen[cont+1]='\0';
  24.            cont++;  
  25.        }
  26.     }
  27.  
  28.     printf("%s",almacen);
  29. }
  30.  
  31. int main(int argc, char *argv[])
  32. {
  33.  
  34.  char *palabra="la casa 23 es mas bonita que la 56 y la 5+6";
  35.  fPalabrasNumeros2(palabra);
  36.  
  37.  getchar();
  38.  return 0;
  39. }



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

Código
  1. #include <stdio.h>
  2.  
  3.  
  4.  
  5. void fPalabrasNumeros2(char *palabra){
  6.  
  7.     char almacen[255];
  8.     int entro=0,i=0;
  9.     char *x=malloc(sizeof(char));
  10.     strcpy(almacen,"");
  11.  
  12.     for(i=1;i<strlen(palabra);i++){
  13.  
  14.        if((isdigit(palabra[i]) && isdigit(palabra[i+1])||(isdigit(palabra[i]) && isdigit(palabra[i-1]))
  15.            || (isdigit(palabra[i]) && palabra[i+1]==' '&& palabra[i-1]==' '))){
  16.          entro=1;                              
  17.          *x=palabra[i];
  18.          strcat(almacen,x);
  19.        }
  20.        else if(entro==1){
  21.            entro=0;
  22.            *x=' ';
  23.            strcat(almacen,x);
  24.        }
  25.     }
  26.  
  27.     printf("%s",almacen);
  28.     free(x);
  29. }
  30.  
  31. int main(void)
  32. {
  33.  
  34.  char *palabra="la casa 23 es mas bonita que la 56 y la 5+6";
  35.  
  36.  
  37.  fPalabrasNumeros2(palabra);
  38.  
  39.  getchar();
  40.  return 0;
  41. }



Título: Re: Palabra con numeros
Publicado por: Jesusm1229 en 28 Junio 2015, 12:47 pm
Buenas, gracias a ambos por su ayuda, fue muy util. Aunque hice el programa no es como lo necesitaba...
Código:

#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...


Título: Re: Palabra con numeros
Publicado por: Jesusm1229 en 28 Junio 2015, 13:00 pm
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...