You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:48:21