Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Uknow en 10 Diciembre 2011, 22:08 pm



Título: Problema con cadenas
Publicado por: Uknow en 10 Diciembre 2011, 22:08 pm
Andaba leyendo unos concursos y decidi intentar un problema.
El punto era emular algo asi:

entrada:
holaaaa muuundooo

salida:
hol3a m2und2o

Logre hacer esto:

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.    char cadena[100],cadena_n[100], *aux = cadena-1;
  8.    char veces('0'); int i(0);
  9.  
  10.    cout << "Cadena: ";
  11.    cin.getline(cadena,100);
  12.  
  13.    while( *aux++ )
  14.    {
  15.           if(*aux == *(aux+1) )
  16.           {
  17.              veces++;
  18.  
  19.           if( *(aux+1) !=  *(aux+2) )
  20.           {
  21.  
  22.               cadena_n[i] = veces;            
  23.               i++;
  24.               veces = '0';
  25.           }
  26.  
  27.              continue;
  28.  
  29.           }
  30.  
  31.    cadena_n[i] = *aux;
  32.    i++;
  33.    }
  34.        cadena_n[i] = '\0';            
  35.  
  36.  
  37.  
  38.    cout << "\n\nCadena_n: " << cadena_n;
  39.    cout << "\n\nCadena: " << cadena;
  40.  
  41.    setbuf(stdin, NULL);
  42.    cin.get();
  43.    return 0;
  44.  
  45.  
  46. }
  47.  
El problema en el code radica en que utilizo un char para contar las veces y poder meterlo en la cadena sin problemas pero como en la tabla ascii solo existe espacio del 1 al 9 despues de esos sigue monstrando el caracter correspondiente en la tabla.

Me pregunto de que forma podria lograr meter el integer en la cadena?
Se me ocurre una forma de hacerlo pero es poco practico y muy engorroso. Pense en hacer uso de atoi y itoa pero no veo de q forma implementarlo correctamente para que me de el resultado q quiero. :/
Pues d q forma se podria hacer tambien? : )

un saludo y gracias!




Título: Re: Problema con cadenas
Publicado por: [L]ord [R]NA en 11 Diciembre 2011, 20:29 pm
Código
  1. cout << <variable> ;

cout acepta enteros para mostrarlos por pantalla.


Título: Re: Problema con cadenas
Publicado por: Uknow en 11 Diciembre 2011, 23:37 pm
Código
  1. cout << <variable> ;

cout acepta enteros para mostrarlos por pantalla.
? Esto a que viene.  :P

Lo que quiero es saber como meter el entero en medio de la cadena.
Total me diste una idea, lo hice asi pero no se resolvio mi duda. D:

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.    char cadena[100], cadena_n[100], *aux = cadena-1;
  8.    int veces(0);
  9.  
  10.    //int i(0);
  11.  
  12.    cout << "Cadena: ";
  13.    cin.getline(cadena,100);
  14.  
  15.    cout << "\n\nCadena_n: ";
  16.  
  17.    while( *aux++ )
  18.    {
  19.           if(*aux == *(aux+1) )
  20.           {
  21.              veces++;
  22.  
  23.           if( *(aux+1) !=  *(aux+2) )
  24.           {
  25.               cout << veces;              
  26.               //cadena_n[i] = veces;            
  27.               //i++;
  28.               veces = 0;
  29.           }
  30.  
  31.              continue;
  32.  
  33.           }
  34.  
  35.    //cadena_n[i] = *aux;
  36.    //i++;
  37.    cout << *aux;
  38.  
  39.    }
  40.  
  41.    //cadena_n[i] = '\0';            
  42.  
  43.    //cout << "\n\nCadena_n: " << cadena_n;
  44.    cout << "\n\nCadena: " << cadena;
  45.  
  46.    setbuf(stdin, NULL);
  47.    cin.get();
  48.    return 0;
  49.  
  50.  
  51. }
  52.