C++字符串回文判断程序无语法错误但输出异常问题咨询
问题分析与错误原因
你的代码存在几个关键问题,导致输出不符合预期:
- 拼写错误:
court<<i<<endl;里的court是笔误,正确写法是cout——不过从你给出的实际输出来看,运行时应该已经修正了这个错误,否则代码会编译失败。 - 回文判断逻辑错误(核心问题):
strrev()函数是原地反转字符串,它会直接修改传入的字符数组,并且返回修改后数组的首地址。- 你用
i == strrev(i)比较的是两个指针的地址,而非字符串内容。因为strrev(i)返回的就是i数组的首地址,所以这个比较永远为真,不管字符串是不是回文,都会执行cout<<" pel"。
- 原字符串本身的问题:你定义的
char i[]="noop"并不是回文,反转后会变成"poon",但因为指针比较的逻辑错误,程序错误地判定它是回文。
修正后的代码示例
如果要正确判断回文,可以这样修改:
#include<iostream> #include<string.h> int main() { char i[]="noop"; // 复制原字符串,避免被strrev修改 char temp[100]; strcpy(temp, i); cout << i << endl; // 用strcmp比较字符串内容,相等返回0 (strcmp(i, strrev(temp)) == 0) ? cout << " is palindrome" : cout << " is not palindrome"; cout << endl; return 0; }
或者用更符合C++风格的std::string写法:
#include<iostream> #include<string> using namespace std; int main() { string s = "noop"; cout << s << endl; string reversed_s(s.rbegin(), s.rend()); if (s == reversed_s) { cout << " is palindrome"; } else { cout << " is not palindrome"; } cout << endl; return 0; }
内容的提问来源于stack exchange,提问作者cross legends cl
相关产品推荐
相关产品推荐

