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

C++字符串回文(Palindrome)判断代码输出相反结果,请问错误在哪

代码问题分析

你这段代码存在两个核心问题:

  • 初始调用递归函数时右边界参数传值错误
    C++ 中std::string的下标从0开始计数,字符串最后一个有效字符的下标为str.size() - 1,你在main函数中直接将str.size()作为右边界r传入ps函数,会导致第一次判断就访问s[s.size()],这个位置存储的是字符串结束符\0,和首字符比对必然不相等,直接返回false,所以得到和预期相反的结果。
  • 输出文本存在拼写错误
    回文的英文拼写是palindrome,你的输出语句里误写为plaindrome。
修正后代码
#include<bits/stdc++.h>
using namespace std;

bool ps(string s,int l, int r){
    if(l>=r) 
        return true;
    if(s[l]!=s[r])
        return false;
    return ps(s,++l,--r);
}
 
int main(){
    string str="naman";
    int s=str.size();
    // 修正右边界为s-1
    bool b=ps(str,0,s-1);
    if(!b){
        cout<<"Not a palindrome";
    }
    else{
        cout<<"A palindrome";
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Manish Kumar Sahu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:54:06