这是我的代码:
#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
string character 的结尾'\0'
。作为您反转的第一个字符......好吧,长度为 0 的字符串将始终出现(即使其余的稍后出现);-)虽然答案已经解决,但最简单的解决方案是使用迭代器:
一切顺利。
您的代码不起作用,因为它遇到了循环,请执行此操作
尝试使用此代码
使用标准库特定函数 reverse() 和 reverse_copy() 很方便。例如:
由于这是针对学生的练习,因此您有多种方法可以很方便地进行练习。这是另一个,使用其他简单的结构。我放了一个预初始化的字符串,以使其更容易进行试验。当不再需要时,函数返回的字符串应该在最后被释放。
这是另一种选择。在这种情况下,投资是在原地进行的,而不会创建另一条链。索引从字符串的两端向中心移动。
invert()
对于具有奇数个字符的字符串,该函数有一个小的优化。通过这种方式,您可以在短时间内使其具有交互性。