0
文字列に含まれるユニークで大文字と小文字が区別された単語の数を計算したいとします。s
これまでは、句読点をスペースに変換し、スペースで区切られた別々の単語をセットに追加しました。 set
には一意の要素のみが含まれているため、次の関数は1
を返します。ただし、文字列s
には大文字と小文字を区別する2つの単語(ab
とAB
)があるため、2を返します。C++を使用して文字列内の大文字と小文字を区別する単語を数えよう
文字列sの単語の大文字と小文字の区別を確認するにはどうすればよいですか?
bool isWordSeparator(char c) {
return std::isspace(c) || std::ispunct(c);
}
int main() {
string s = "ab\nAB!ab?AB:ab.AB;ab\nAB";
transform(s.begin(), s.end(), s.begin(), [](char c)->char {
if (isWordSeparator(c))
return ' ';
});
istringstream iss(s);
set<string> words((istream_iterator<string>(iss)), istream_iterator<string>());
cout << "Number of Words: " << words.size() << endl;
return 0;
}