0 c++ string if-statement operator-keyword
我正在编写代码来检查句子是否是回文.我觉得我的逻辑是正确的,但用于检查字符串反向的if语句似乎不起作用.我在网上尝试了很多解决方案,但仍然没有.每根弦都被视为不是回文.我觉得错误是在(句子==反向):
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <sstream>
using namespace std;
int main(int argc, char *argv[]) {
while (true) {
string sentence;
string reverse = "";
cout << "Enter a sentence below to check (-1 to end):" << endl;
getline(cin, sentence);
if (sentence == "q") {
break;
}
for (int i = sentence.length(); i >= 0; i-- ) {
reverse += sentence[i];
}
cout << sentence << " reversed is: " << "[" << reverse << "]" << endl;
if (sentence == reverse) {
cout << sentence << " is a palindrome" << endl;
} else {
cout << sentence << " is not a palindrome" << endl;
}
cout << endl;
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
问题不在于if.这是这部分:
for (int i = sentence.length(); i >= 0; i--) {
reverse += sentence[i];
}
Run Code Online (Sandbox Code Playgroud)
i = sentence.length()是错的,你必须从i = sentence.length()-1.否则,它似乎在字符串中添加了一个空格字符,从而导致错误的结果.那个循环应该是:
for (int i = sentence.length()-1; i >= 0; i--) {
reverse += sentence[i];
}
Run Code Online (Sandbox Code Playgroud)
请注意,根据文档:
返回对指定位置pos处的字符的引用.不执行边界检查.如果pos> size(),则行为未定义.
因此,无法保证添加的空格,任何事情都可能发生.对于更安全的版本,请检查at函数,如果该位置无效而不是静默导致未定义的行为,则会抛出异常.