if语句无法正常工作[C ++]

问题描述 投票:0回答:3

我正在编写代码来检查句子是否是回文。我觉得我的逻辑是正确的,但用于检查字符串反向的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;
}

}

任何帮助将不胜感激。

c++ string if-statement operator-keyword
3个回答
5
投票

问题不是if。这是这部分:

for (int i = sentence.length(); i >= 0; i--) {
        reverse += sentence[i];
}

i = sentence.length()错了,你必须从i = sentence.length()-1开始。否则,它似乎在字符串中添加了一个空格字符,从而导致错误的结果。那个循环应该是:

for (int i = sentence.length()-1; i >= 0; i--) {
        reverse += sentence[i];
}

请注意,根据to the documentation

返回对指定位置pos处的字符的引用。不执行边界检查。如果pos> size(),则行为未定义。

因此,无法保证添加的空格,任何事情都可能发生。对于更安全的版本,请查看at函数,如果该位置无效而不是静默导致未定义的行为,则会抛出异常。


0
投票

字符串的结尾是length - 1,所以请改用:

for (int i = sentence.length() - 1; i >= 0; --i)

0
投票

用这个替换你的for循环

for (int i = sentence.length()-1; i >= 0; i-- ) {
© www.soinside.com 2019 - 2024. All rights reserved.