C ++ Program to invert a word

2

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.

    
asked by Malthael 19.09.2016 в 18:34
source

5 answers

3

Your code does not work because it does not take into account the character of c end of chain '%code%' . Being the first character you invest ... you will always see a string of length 0 (although then the rest is); -)

#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] = '
#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] = '%pre%';
    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;
}
'; 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; }
    
answered by 19.09.2016 / 21:01
source
2

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;
    
answered by 19.09.2016 в 20:44
2

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';
}

Greetings.

    
answered by 20.09.2016 в 08:47
0

Your code does not work because it hits the back, it does 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;
}
    
answered by 19.09.2016 в 20:36
0

It is convenient to use the specific functions of the standard library, 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';
}
    
answered by 21.09.2016 в 03:25