2

我是 C++ 的新手,周日凌晨 1 点正在处理一个回文程序,因为!我遇到了这个问题:

输入:测试反向:tset3-F

3-F 是从哪里来的?有时它只是-F 或另一个数字-F。这是从哪里来的?

这是我的代码:

 #include <iostream>
 #include <string>


 using namespace std;

int main() {

 string eString;

 int length;
 int counter = 0;

 cout << "Enter String: ";
 cin >> eString;

 length = eString.length();


 char reverseChar[length];




  for(int x = eString.length() -1; x > -1; x--) {

     reverseChar[counter] = eString[x];

     counter++;

 }
 cout << "Reverse: " << reverseChar;


  }

非常感谢您的时间。

4

3 回答 3

6

您没有在字符串的末尾添加空终止符。它是碰巧在内存中的随机数据。

reverseChar 应该是长度 + 1 的大小

最终字符应设置为 '\0'

reverseChar[长度] = '\0';

见:http ://en.wikipedia.org/wiki/Null-terminated_string

于 2012-07-15T00:17:06.170 回答
3

您需要在reverseChar字符串中添加一个空终止符。C 中所有字符串的最后一个字符后面都有一个 0,它告诉字符串操作函数字符串在内存中的结束位置。0 永远不会包含在长度中,因此您必须记住在为字符串分配空间时为其添加空间。

char reverseChar[length + 1]; 

for(int x = eString.length() -1; x > -1; x--) { 

     reverseChar[counter] = eString[x]; 
     counter++; 

} 

reverseChar[length] = 0;
于 2012-07-15T00:19:47.953 回答
2

我认为: char reverseChar[length+1] 因为您需要为字符串分隔符 reverseChar[length]='\0' 的末尾留出空间

于 2012-07-15T00:19:47.353 回答