C ++确定整个句子是否都是回文,而不仅仅是第一个单词

时间:2019-10-25 19:45:38

标签: c++ string loops do-while palindrome

我正在编写一个从输入文件读取的程序,每行都有一个句子。例如:

  

杰克和“吉尔”

     

一个人,一个计划,一条运河-巴拿马

     

永远不要太远。

     

Euston看到我不是Sue。

我们必须确定这些句子是否是回文,我写了一个do while循环。它似乎工作正常,只是我只需要读取整个行而不是第一行即可。我得到的输出是,假设我的第一行是杰克和“吉尔”:

  

杰克不是回文

然后我问用户是否要继续前进,我希望它转到下一行,所以我说“是”,然后得到

  

不是回文

,我可以在这里看到它读取句子中的下一个单词,而不是下一行。我认为这是因为它正在读取空格以确定下一个要看的单词。

本质上,我需要我的程序读取整行内容,而忽略标点符号技巧,例如Jill周围的引号,巴拿马旁边的-等。所以我会得到

  

杰克和“吉尔”不是回文。

     

一个人,一个计划,一条运河-巴拿马是回文。

这是我的代码:

#include <fstream>

#include <string>

#include <iomanip>

#include <iostream>

using namespace std;

int main() {
  string input;
  ifstream infile;
  string keepgoing;
  infile.open("palindromes.txt");

  do {
    infile >> input;
    if (input == string(input.rbegin(), input.rend())) {
      cout << input << " is a palindrome" << endl;
    } else {
      cout << input << " is not a palindrome" << endl;
    }

    cout << "Do you want to keep going? [Yes or No] ";
    cin >> keepgoing;

  } while (keepgoing == "Yes" || keepgoing == "yes");
}

0 个答案:

没有答案