今天是个好日子!下面是一个程序,它询问用户一个句子并输出其中的回文数。
#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;
}
它工作得很好。但是例如,当我输入“The quick brown gag has a blue eye.”时,程序显示的回文数只有 1,但实际上,该句子有 2 个回文:gag 和 eye。问题是“眼睛”这个词有句号。那么当用户输入“我喜欢中午、晚上和午夜”时,程序如何忽略句点和逗号等其他标点符号。Noon 是回文,但由于逗号,程序无法识别它。
另一个问题是大小写。当用户输入“女士,我的工作已完成”时,我希望该程序能够工作(并忽略 ASCII 等效项)。我知道这与tolow有关。
总而言之,我希望该程序具有以下功能:a)忽略标点符号和 b)大写。
哦,“stringstream processtokens(sentence);...”的替代方法是什么?相反,我需要这个程序来使用substring (substr) 和 find。
请指导我,伙计们!谢谢您,非常感谢您提供任何帮助。再次感谢,祝您有美好的一天!