[Ayuda] Invertir arreglos.

Iniciado por Zodiak98, 7 Mayo 2014, 20:40 PM

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

Zodiak98

¡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! :)

leosansan

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



Blaster

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

Zodiak98

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



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

leosansan

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