Добрый день всем!Ниже приведена программа, которая запрашивает у пользователя предложение и выводит в нем количество палиндромов.
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
bool isPalindrome (const std::string& s) {
for (int i = 0; i < (s.length())/2; ++i) {
if (s[i] != s[s.length()-1 - i])
return false;
else
return true;
}
}
int main() {
string sentence;
int counter=0;
cout << "Please input a sentence." << endl;
getline(cin, sentence);
stringstream processtokens(sentence);
for(string word; processtokens >> word;)
if(isPalindrome(word))
++counter;
cout << "Number of Palindromes are : " << counter << endl;
}
Работает просто отлично.Но, например, когда я ввожу «Быстрая коричневая затычка с голубым глазом», число палиндромов, отображаемых программой, составляет всего 1, но на самом деле предложение имеет 2 палиндрома: затычка и глаз.Проблема в том, что у слова «глаз» есть точка.Так как же программа может игнорировать точку и другие знаки препинания, такие как запятая, когда, например, пользователь вводит «Я люблю полдень, вечер и полночь».Полдень - это палиндром, но программа не распознает его из-за запятой.
Другая проблема - это заглавные буквы.Я хочу, чтобы эта программа работала (и игнорировала эквиваленты ASCII), когда пользователь ввел «Мадам, моя работа выполнена».Я знаю, что это как-то связано с tolower .
Подводя итог, я хочу, чтобы эта программа имела функцию , которая a) игнорирует знаки пунктуации и б) заглавные буквы .
И, о-о, какова альтернатива "процессам строки потока (предложение); ..."?Скорее, мне нужна эта программа, чтобы использовать substring (substr) и найти .
Пожалуйста, помогите мне, ребята!Спасибо и любая помощь очень ценится.Еще раз спасибо и хорошего дня!