检查一个string是否是回文

可能重复:
find给定的string是否是回文或不是回文

我需要创build一个允许用户input一个string的程序,我的程序将检查他们input的string是否是一个回文(可以向前读取相同的字)。

只是比较string与自己颠倒:

string input; cout << "Please enter a string: "; cin >> input; if (input == string(input.rbegin(), input.rend())) { cout << input << " is a palindrome"; } 

这个string构造函数需要一个开始和结束迭代器,并从这两个迭代器之间的字符中创buildstring。 由于rbegin()是string的结尾并递增,所以我们创build的string将会反向添加input字符,反转string。

然后,您只需将其与input进行比较,如果它们相同,则是回文。

这不考虑大小写或空格,所以你必须自己改进。

请注意,将整个string(使用rbegin() / rend()范围构造函数或std::reverse )进行std::reverse并将其与input进行比较将会执行不必​​要的工作。

将string的前半部分与后半部分进行比较就足够了:

 #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"; } 

演示: http : //ideone.com/mq8qK

 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; } 

// STLstring版本:

 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; } 

反转string并检查原始string和反转是否相同

我不是c ++的人,但是你应该能够从中获得主要的东西。

 public static string Reverse(string s) { if (s == null || s.Length < 2) { return s; } int length = s.Length; int loop = (length >> 1) + 1; int j; char[] chars = new char[length]; for (int i = 0; i < loop; i++) { j = length - i - 1; chars[i] = s[j]; chars[j] = s[i]; } return new string(chars); }