C ++. Определить, является ли целое предложение палиндромом, а не только первым словом. - PullRequest
1 голос
/ 25 октября 2019

Я пишу программу, которая читает из входного файла, с предложением в каждой строке. Например:

Джек и "Джилл"

Человек, план, канал - Панама

Никогда не слишком далеко, даже.

Юстон увидел, что я не Сью.

Мы должны определить, являются ли эти предложения палиндромами, и я написал цикл do while. Кажется, он работает правильно, за исключением того, что мне просто нужно прочитать всю строку, а не только первую. Я получаю вывод, говоря, что моя первая строка - это Джек и Джилл:

Джек не палиндром

Затем я спрашиваю, хочет ли пользователь сохранитьидти, что я хотел бы перейти на следующую строку, поэтому я говорю Да, а затем получить

и не является палиндромом

, и я вижу здесь, чтоон читает следующее слово в предложении, а не следующую строку. Я предполагаю, что это потому, что он читает пустое пространство, чтобы определить следующее слово для просмотра.

По сути, мне нужна моя программа для чтения всей строки, игнорируя знаки препинания, такие как кавычки вокруг Джилл, -рядом с Панамой и т. д. Итак, я бы получил

Джека, а "Джилл" - не палиндром.

Человек, план, канал - Панама - палиндром.

и т. Д.

Вот мой код:

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