おはようございます!以下は、ユーザに文章を要求し、文章の数を出力するプログラムです。文章中の回文の数を数える
#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つの回文:ギャグと目があります。問題は、単語 "eye"にピリオドがあることです。だから、たとえば、ユーザーが「正午、夕方、真夜中が好き」と入力したときに、プログラムはカンマのようなピリオドやその他の句読点を無視できます。正午は回文ですが、プログラムはカンマのためにそれを認識しません。
もう1つの問題は大文字です。ユーザーが「マダム、私の仕事は終わった」と入力したときに、このプログラムを動作させて(そしてASCIIの同等物を無視する)私はそれがtolowerと関係があることを知っています。要約する
、私はこのプログラムは、a)のは句読点マークおよびb)総額を無視機能を持っていると思います。
また、「stringstream processtokens(sentence);」の代替手段は何ですか?むしろ、私は部分文字列(substr)を使用し、を見つけるためにこのプログラムが必要です。
私をガイドしてください!ありがとうございました、そしてどんな種類の助けもありがとうございます。おかげさまで、ありがとうございました!
あなたはすでにあなたがする必要があるほとんどすべてを説明しました。あなたはすべてを小文字に変換し、非文字をスキップします。あなたはほとんどそこにいます。 –