Test Foro de elhacker.net SMF 2.1

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

#include <iostream>
#include <cstdlib>

using namespace std;

int main() {
   char MString[40];
   char BString[40];
   int CVariable = 0;

   cout << "Enter a string: "; cin >> MString;
   for(int h = 0; h < 39; h++) {
       if(!(MString[h] == '\0'))
           CVariable += 1;
       else if(MString[h] == '\0')
           break;
   }

   for(int h = 1; h <= CVariable; ++h)
       BString[(h - 1)] = MString[CVariable - h];

   cout << "--------------------------------------------" << endl;
   cout << "The string has: " << CVariable << " letters." << endl;
   cout << "The original string: " << MString << endl;
   cout << "The backwards string is: " << BString << endl;
   cout << "--------------------------------------------" << endl;

   system("pause>nul");
   return 0;
}


Y el problema radica acá:
Código (cpp) [Seleccionar]

   for(int h = 1; h <= CVariable; ++h)
       BString[(h - 1)] = MString[CVariable - h];


¡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 (cpp) [Seleccionar]
for(int h = 0; h < CVariable; ++h)
     BString[h] = MString[CVariable-1 - h];
   BString[CVariable]= '\0';


¡¡¡¡ 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 (cpp) [Seleccionar]
for(int h = 0; h < MStrinf[h]; h++)
  CVariable++;


Saludos
Título: Re: [Ayuda] Invertir arreglos.
Publicado por: Zodiak98 en 7 Mayo 2014, 21:17 PM
Cita de: leosansan en  7 Mayo 2014, 20:58 PM
No "cerrabas" la cadena con el caracter nulo:

Código (cpp) [Seleccionar]
for(int h = 0; h < CVariable; ++h)
     BString[h] = MString[CVariable-1 - h];
   BString[CVariable]= '\0';


¡¡¡¡ 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
Cita de: Zodiak98 en  7 Mayo 2014, 21:17 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)