首页 > 解决方案 > C ++确定整个句子是否是回文,而不仅仅是第一个单词

问题描述

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

杰克和“吉尔”

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

甚至,永远不要走得太远。

尤斯顿看出我不是苏。

我们必须确定这些句子是否是回文,我写了一个 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");
}

标签: c++stringloopsdo-whilepalindrome

解决方案


推荐阅读