C++ C++;回文无效
我想创建一个函数,根据输入是否为回文返回true/false,当给定abcddcba或aba时,它不会给出true,但应该给出。plz帮助C++ C++;回文无效,c++,function,for-loop,if-statement,C++,Function,For Loop,If Statement,我想创建一个函数,根据输入是否为回文返回true/false,当给定abcddcba或aba时,它不会给出true,但应该给出。plz帮助 bool checkPalindrome(char input[],int p=0) { if(input[1]=='\0'){ return true; } if(sizeof(input)%2==0) { int a = sizeof(input); for(int i=0;i&
bool checkPalindrome(char input[],int p=0) {
if(input[1]=='\0'){
return true;
}
if(sizeof(input)%2==0) {
int a = sizeof(input);
for(int i=0;i<(a/2);i++) {
if(input[0+i]==input[a-i-2]){
p++;
}
}
if(p==a/2){
return true;
} else{
return false;
}
}
else{
int a = sizeof(input);
for(int i=0;i<((a-1)/2);i++)
{
if(input[0+i]==input[a-i-2]){
p++;
}
}
if(p==(a-1)/2){
return true;
} else{
return false;
}
}
}
bool checkPalindrome(字符输入[],int p=0){
如果(输入[1]='\0'){
返回true;
}
如果(sizeof(input)%2==0){
int a=sizeof(输入);
对于(inti=0;i您的代码太长了。有一种简单的方法:在字符串的元素上迭代一次,比较n-1与0,n-2与1,依此类推
如果两个字符不相同,则返回false,否则继续检查:
bool checkPalindrome(char* str) {
const int size = strlen(str);
for(int i(0), j(size) - 1); i < size / 2; i++, j--)
if(str[i] != str[j])
return false;
return true;
}
int main(){
char* str = "level";
cout << checkPalindrome(str);
cout << endl << endl;
return 0;
}
bool检查回文(char*str){
常量int size=strlen(str);
对于(inti(0),j(size)-1;i
bool checkPalindrome(const std::string& str)
{
size_t len = str.size();
for (size_t i = 0; i < len/2; i++)
{
if (str[i] != str[len-1-i])
return false;
}
return true;
}
bool检查回文(const std::string&str)
{
大小长度=长度大小();
对于(大小i=0;i
C风格:
bool checkPalindrome(const char* str)
{
size_t len = str ? strlen(str) : 0;
for (size_t i = 0; i < len/2; i++)
{
if (str[i] != str[len-1-i])
return false;
}
return true;
}
bool检查回文(const char*str)
{
长度=str?strlen(str):0;
对于(大小i=0;i
在这两种情况下,您可能需要评估(询问)空字符串是否应被视为回文。基于字符串和迭代器的C++版本(仅为完整起见,其他答案已经非常好):
解释:迭代器p
从字符串前面开始,q
在后面(在最后一个字符之后)。p
将前进,而q
将后退。如果p
达到q
或者p
已经通过q
(如果单词长度为偶数,则为特例),结束,我们可以得出回文。但如果之前,p
处的字符与q
之前的字符有任何区别,则它不是回文
如果您以前从未使用过调试器,现在是学习如何使用调试器的最佳时机。使用调试器,您可以在监视变量及其值的同时逐行检查代码。我还建议您花一些时间阅读Eric Lippert的文章。sizeof(input)
将返回sizeof(char*)
(inti=0;i4
或8
,这取决于OP是在32位还是64位系统上。您必须使用strlen()获取字符串的长度,而不是<代码> SigeOs。但是应该使用<代码> STD::String < /Cord>而不是C字符串。在for循环的每次迭代中,您都会调用“代码> StrLin < /C>”,这会导致性能损失。您也需要做两次比较。很好!但是如果这是C++问题,如果我们在2017,那么可以这样做。我可以解释一下为什么我们不使用string
,但仍然使用char*
?@Christophe:使用string更安全、更容易,但我只保留了OP的代码。
bool checkPalindrome(const string& str) {
for (auto p = str.begin(),q = str.end(); p!=q && p!=q+1; p++ )
if (*p!=*--q) // if char from front doesn't match char from rear ?
return false; // then it's not a palindrome !
return true;
}