【发布时间】:2012-01-25 05:43:29
【问题描述】:
大家好!下面是一个程序,它询问用户一个句子并输出其中的回文数。
#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 等价物)。我知道这与tolower有关。
总而言之,我希望这个程序有一个函数,它a)忽略标点符号和b)大写。
哦,“stringstream processtokens(sentence);...”的替代方法是什么?相反,我需要这个程序使用 substring (substr) 并找到。
请指导我,伙计们!谢谢您,非常感谢您提供任何帮助。再次感谢,祝您有美好的一天!
【问题讨论】:
-
您已经描述了几乎所有您需要做的事情。在进行过程中将所有内容都转换为小写,并跳过非字母。你快到了。
标签: c++ function pointers palindrome