验证字符串是否为回文的函数

时间:2013-11-23 18:26:40

标签: c++ palindrome

现在我正在制作一个程序,它会告诉你输入的字符串是否是回文,我最后一步陷入困境。有三个基本函数可以删除句子中的所有空格,将它们删除为小写,然后反转它们,然后当我的函数验证它们然后返回一个布尔值时。所以现在这个功能,生日快乐!将作为yadhtribyppah出现。 这是我到目前为止在我的功能中所拥有的:

string updated1;
string updated2;

updated1 = makeLower(verify);

updated2 = removeNonLetters(updated1);

updated1 = reverse(updated2);


for (int i = 0; i < updated2.length(); i++)
{
    if (updated2[i] != updated1[i])
    {
        break;
        return false;
    }
    else if (updated2[i] == updated1[i])
    {
        return true;

    }



}

}

5 个答案:

答案 0 :(得分:1)

假设您的其他功能没有错误,请将for循环更改为:

for (int i = 0; i < updated2.length(); i++)
{
    // If we find even one inequality, we know its not a palindrome.
    if (updated2[i] != updated1[i])
        return false;
}
// if the for loop has been executed satisfactorily, we know that it is a palindrome.
return true;

答案 1 :(得分:1)

  1. 删除break,而不是在字符不同的情况下返回false。
  2. 在循环中不要return true - 在你完成所有角色之前,你不知道它是一个回文!相反,如果for循环结束,则返回true,在循环之外。

答案 2 :(得分:0)

这不起作用的原因是因为您在返回语句之前有break语句。这会打破循环,因此永远不会调用返回。

可能的解决方案:

1)删除“if not equal”情况下的break语句。 2)默认情况下,在函数末尾的循环外返回false。

修改

我也注意到你是从“if is equal”的情况下回来的。如果你这样做,那么它只会检查第一组字符。一个更好的算法是在“如果不相等”的情况下返回false,删除“if equal”的情况,然后在函数结束时默认返回true。

答案 3 :(得分:0)

在第一个breakreturn语句之前不应该有if,而在第二个return true中也不应该#include <iostream> #include <string> #include <algorithm> using namespace std; bool isnotalpha(char c){return !isalpha(c);} int main(void) { string updated1="AbbA",updated2; transform(updated1.begin(),updated1.end(),updated1.begin(),tolower); updated1.erase(remove_if(updated1.begin(),updated1.end(),isnotalpha),updated1.end()); updated2=updated1; reverse(updated2.begin(),updated2.end()); bool palindrome=true; for(int i=0; i<updated1.length(); i++) { if(updated1[i]!=updated2[i]) palindrome=false; //if(updated1[i]!=updated1[updated1.length()-1-i]) palindrome=false; Can be done without using updated2 } if(palindrome) cout << "Palindrome!" << endl; else cout << "Not Palindrome!" << endl; return 0; } 因为你没有完成循环。

你可以做这样的事情:

{{1}}

答案 4 :(得分:0)

您不必反转字符串只需要检查它是否是对称的

bool testIt(const string value)
{ 
  string updated2 = makeLower(removeNonLetters(value));
  int L = updated2.length();
  for(var i = 0; i < L/2; i++)
  {
    if (updated2[i] != updated2[L-1-i])
      return false;
  }
  return true;
}