Cub*_*bbi 58
请注意,反转整个字符串(使用rbegin()/ rend()range构造函数或使用std::reverse)并将其与输入进行比较将执行不必要的工作.
将字符串的前半部分与后半部分进行比较就足够了,反之亦然:
#include <string>
#include <algorithm>
#include <iostream>
int main()
{
std::string s;
std::cin >> s;
if( equal(s.begin(), s.begin() + s.size()/2, s.rbegin()) )
std::cout << "is a palindrome.\n";
else
std::cout << "is NOT a palindrome.\n";
}
Run Code Online (Sandbox Code Playgroud)
Set*_*gie 38
只需比较字符串与其自身的反转:
string input;
cout << "Please enter a string: ";
cin >> input;
if (input == string(input.rbegin(), input.rend())) {
cout << input << " is a palindrome";
}
Run Code Online (Sandbox Code Playgroud)
这个构造函数string接受一个开始和结束迭代器,并从这两个迭代器之间的字符创建字符串.因为rbegin()是字符串的结尾并且递增它后退通过字符串,我们创建的字符串将具有input反向添加到其中的字符,反转字符串.
然后你只需将它input与它们进行比较,如果它们相等,它就是一个回文.
这不考虑大小写或空格,所以你必须自己改进.
bool IsPalindrome(const char* psz)
{
int i = 0;
int j;
if ((psz == NULL) || (psz[0] == '\0'))
{
return false;
}
j = strlen(psz) - 1;
while (i < j)
{
if (psz[i] != psz[j])
{
return false;
}
i++;
j--;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
// STL字符串版本:
bool IsPalindrome(const string& str)
{
if (str.empty())
return false;
int i = 0; // first characters
int j = str.length() - 1; // last character
while (i < j)
{
if (str[i] != str[j])
{
return false;
}
i++;
j--;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)