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
相关产品推荐
相关产品推荐

