Это мой код:
#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;
}
Моя проблема в том, что перевернутое слово не появляется в конце.
Зачем использовать массив, а не напрямую строку
Ваш код не работает, потому что он не учитывает
c
конец символа строки'\0'
. Будучи первым символом, который вы инвертируете... ну, строка длины 0 всегда будет появляться (даже если остальные будут позже) ;-)Хотя ответ уже решен, самое простое решение — использовать итераторы:
Всего наилучшего.
Ваш код не работает, потому что он попадает в цикл, сделайте это
попробуй с этим кодом
Удобно использовать специальные функции стандартной библиотеки, reverse() и reverse_copy(). Например:
Поскольку это упражнение для студента, удобно, что у вас есть несколько способов его выполнения. Это еще один, использующий другие простые конструкции. Я помещаю предварительно инициализированную строку, чтобы с ней было легче экспериментировать. Строка, возвращаемая функцией, должна быть освобождена в конце, когда она больше не нужна.
Это еще одна альтернатива. В этом случае инвестиции осуществляются на месте, без создания другой цепочки. Индекс перемещается от обоих концов строки к центру. В функции есть небольшая оптимизация
invert()
для случая строк с нечетным количеством символов.Таким образом, вы можете быстро сделать его интерактивным.