Problema con cadenas

Iniciado por Uknow, 10 Diciembre 2011, 22:08 PM

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

Uknow

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 (cpp) [Seleccionar]
#include <iostream>

using namespace std;

int main()
{
   char cadena[100],cadena_n[100], *aux = cadena-1;
   char veces('0'); int i(0);
   
   cout << "Cadena: ";
   cin.getline(cadena,100);
   
   while( *aux++ )
   {
          if(*aux == *(aux+1) )
          {
             veces++;
         
          if( *(aux+1) !=  *(aux+2) )
          {
                           
              cadena_n[i] = veces;            
              i++;
              veces = '0';
          }
           
             continue;
                             
          }
                 
   cadena_n[i] = *aux;
   i++;
   }
       cadena_n[i] = '\0';            
   
 
   
   cout << "\n\nCadena_n: " << cadena_n;
   cout << "\n\nCadena: " << cadena;
   
   setbuf(stdin, NULL);
   cin.get();
   return 0;
   
   
}

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!



[L]ord [R]NA

Código (cpp) [Seleccionar]
cout << <variable> ;

cout acepta enteros para mostrarlos por pantalla.

Uknow

Cita de: [L]ord [R]NA en 11 Diciembre 2011, 20:29 PM
Código (cpp) [Seleccionar]
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 (cpp) [Seleccionar]
#include <iostream>

using namespace std;

int main()
{
    char cadena[100], cadena_n[100], *aux = cadena-1;
    int veces(0);
   
    //int i(0);
   
    cout << "Cadena: ";
    cin.getline(cadena,100);
   
    cout << "\n\nCadena_n: ";
   
    while( *aux++ )
    {
           if(*aux == *(aux+1) )
           {
              veces++;
               
           if( *(aux+1) !=  *(aux+2) )
           {
               cout << veces;             
               //cadena_n[i] = veces;           
               //i++;
               veces = 0;
           }
             
              continue;
                               
           }
                   
    //cadena_n[i] = *aux;
    //i++;
    cout << *aux;
   
    }
   
    //cadena_n[i] = '\0';             
   
    //cout << "\n\nCadena_n: " << cadena_n;
    cout << "\n\nCadena: " << cadena;
   
    setbuf(stdin, NULL);
    cin.get();
    return 0;
   
   
}