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
Author: Malthael, 2016-09-19

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';
}
 0
Author: , 2016-09-21 01:25:03