C++ program to invert a word
This Is My Code:
#include <iostream>
#include <cstring>
using namespace std;
void invertidor (char cadena[], int tamano)
{
int tamano2=tamano;
char invertido[tamano2];
for (int x=0, y=tamano; x<tamano && y>=0; x++, y--)
{
invertido[x]=cadena[y];
}
cout<<"> "<<cadena<<endl;
cout<<endl<<"> "<<invertido<<endl<<endl;
return;
}
int main ()
{
char opcion;
string palabra;
int longitud, longitud2;
while (opcion!='n')
{
system ("cls");
cout<<"> Ejercicio 6"<<endl<<endl;
cout<<"> Ingrese una palabra: ";
cin>>palabra;
longitud=palabra.length();
char cadena[palabra.size()+1];
strcpy(cadena, palabra.c_str());
longitud2=strlen(cadena);
invertidor (cadena,longitud2);
cout<<"> Desea hacer una nueva operacion? (s/n): ";
cin>>opcion;
if (opcion=='n')
{
exit(0);
}
}
return 0;
}
My problem is that the inverted word does not appear at the end.
2
5 answers
Your Code doesn't work because it doesn't take into account the string end Character c
'\0'
. Being the first character you invest... because a string of length 0 will always appear (even if the rest is later); -)
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
void invertidor (char cadena[], int tamano)
{
char invertido[tamano];
for (int x=0, y=tamano-1; x<tamano; x++, y--)
{
invertido[x]=cadena[y];
}
invertido[tamano] = '\0';
cout<<"> "<<cadena<<endl;
cout<<endl<<"> "<<invertido<<endl<<endl;
return;
}
int main ()
{
char opcion;
string palabra;
int longitud, longitud2;
while (opcion!='n')
{
system ("cls");
cout<<"> Ejercicio 6"<<endl<<endl;
cout<<"> Ingrese una palabra: ";
cin>>palabra;
char cadena[palabra.size()+1];
strcpy(cadena, palabra.c_str());
longitud=strlen(cadena);
invertidor (cadena,longitud);
cout<<"> Desea hacer una nueva operacion? (s/n): ";
cin>>opcion;
if (opcion=='n')
{
exit(0);
}
}
return 0;
}
3
Author: Neoniet, 2016-09-19 19:15:55
Although the answer is already solved, the simplest solution is to use iterators:
int main()
{
std::string palabra;
std::cout << "Introduce una palabra\n";
std::cin >> palabra;
std::string invertida(palabra.rbegin(),palabra.rend());
std::cout << "Palabra invertida: " << invertida << '\n';
}
A greeting.
3
Author: eferion, 2016-09-20 06:47:53
Why use an array and not directly a string
string cadena = "Hola mundo!";
string aux_cadena = "";
for (int i = cadena.size(); i >=0 ; i--)
aux_cadena += cadena[i];
cout<<"El texto normal es: "<<cadena<<endl;
cout<<"El texto invertido es: "<<aux_cadena<<endl;
return 0;
2
Author: Dev. Joel, 2016-09-20 00:08:56
Your code doesn't work because you paste the return, do this
Ingresada abandonado
0 obandonada A<>O
1 odandonaba B<>D
2 odandonaba A<>A
3 odandonaba N<>N
4 odanodnaba D<>O
5 odanodnaba D<>O
6 odandonaba N<>N
7 odandonaba A<>A
8 odandonaba B<>D
9 abandonada A<>O
Try This code
char* Invertidor (string palabraOriginal)
{
int tamano = strlen(palabraOriginal);
char palabraInvertida[tamano];
int posOri = tamano;
for (int posInv=0; posInv<tamano ; posInv++)
{
palabraInvertida[posInv]=palabraOriginal[posOri];
posOri--;
}
return palabraInvertida;
}
0
Author: Alejandro Ricotti, 2016-09-19 19:07:18
You should use the standard library-specific functions, reverse () and reverse_copy (). For example:
#include <iostream>
#include <algorithm>
int main()
{
std::string cadena = "Hola mundo!";
std::reverse(cadena.begin(), cadena.end());
std::cout << "anedca: " << cadena << '\n';
}