Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Zodiak98 en 7 Mayo 2014, 20:40 pm



Título: [Ayuda] Invertir arreglos.
Publicado por: Zodiak98 en 7 Mayo 2014, 20:40 pm
¡Hola! :)
Tengo un problema con un ejercicio que me encontré en la web y que pensé que no me daría problemas y empecé a escribir código, pero le subestimé. Haha Mi problema es el siguiente, tomar una cadena por teclado e invertirla y ponerla dentro de otro arreglo. Cuando inserto una cadena grande, el programa si la invierte muy bien; sin embargo, cuando coloco cadenas cortas el programa inserta además 'basura'.

Acá les dejaré el código fuente:
Código
  1.  
  2. #include <iostream>
  3. #include <cstdlib>
  4.  
  5. using namespace std;
  6.  
  7. int main() {
  8.    char MString[40];
  9.    char BString[40];
  10.    int CVariable = 0;
  11.  
  12.    cout << "Enter a string: "; cin >> MString;
  13.    for(int h = 0; h < 39; h++) {
  14.        if(!(MString[h] == '\0'))
  15.            CVariable += 1;
  16.        else if(MString[h] == '\0')
  17.            break;
  18.    }
  19.  
  20.    for(int h = 1; h <= CVariable; ++h)
  21.        BString[(h - 1)] = MString[CVariable - h];
  22.  
  23.    cout << "--------------------------------------------" << endl;
  24.    cout << "The string has: " << CVariable << " letters." << endl;
  25.    cout << "The original string: " << MString << endl;
  26.    cout << "The backwards string is: " << BString << endl;
  27.    cout << "--------------------------------------------" << endl;
  28.  
  29.    system("pause>nul");
  30.    return 0;
  31. }
  32.  

Y el problema radica acá:
Código
  1.    for(int h = 1; h <= CVariable; ++h)
  2.        BString[(h - 1)] = MString[CVariable - h];
  3.  

¡Gracias de antemano! :)


Título: Re: [Ayuda] Invertir arreglos.
Publicado por: leosansan en 7 Mayo 2014, 20:58 pm
No "cerrabas" la cadena con el caracter nulo:

Código
  1. for(int h = 0; h < CVariable; ++h)
  2.      BString[h] = MString[CVariable-1 - h];
  3.    BString[CVariable]= '\0';
  4.  

¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: [Ayuda] Invertir arreglos.
Publicado por: Blaster en 7 Mayo 2014, 21:06 pm
Agregar una cosa mas, seria mas conveniente que condicionaras el primer for
segun la cadena que el usuario haya ingresado

Código
  1. for(int h = 0; h < MStrinf[h]; h++)
  2.   CVariable++;

Saludos


Título: Re: [Ayuda] Invertir arreglos.
Publicado por: Zodiak98 en 7 Mayo 2014, 21:17 pm
No "cerrabas" la cadena con el caracter nulo:

Código
  1. for(int h = 0; h < CVariable; ++h)
  2.      BString[h] = MString[CVariable-1 - h];
  3.    BString[CVariable]= '\0';
  4.  

¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)

¡Vale, gracias! Me siento un poco estúpido por no haberme dado cuenta de eso. xD


Título: Re: [Ayuda] Invertir arreglos.
Publicado por: leosansan en 7 Mayo 2014, 21:24 pm
¡Vale, gracias! Me siento un poco estúpido por no haberme dado cuenta de eso. xD

¡No hombre!, a todos nos pasa lo mismo con frecuencia. ;)

¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)