このプログラムに問題があります。このプログラムは、特定の入力に含まれる行、単語、文字、一意の行、および一意の単語の数をユーザーに通知することになっています。今のところ、言葉と文字は大丈夫です。しかし、ユーザーが複数の行を入力したい場合、どうすればよいでしょうか? 関数は、両方の行の結果を一緒に追加するのではなく、一度に1 つの行の結果のみを出力します。また、Unique Lines と Unique Words が正しく機能しません。私はC++を始めたばかりなので、あまり経験がありません。誰か助けてくれませんか?
問題:
- プログラムは一度に 1 行ずつ読み取るため、ユーザーが複数回入力すると、プログラムは結果を 1 つのエンティティとして追加するのではなく、個別に生成します。
Unique Lines と Unique Words が機能していません。プログラムで使用されているライブラリを使用して実装する方法についてのアイデア。
#include <iostream> using std::cin; using std::cout; using std::endl; #include <string> using std::string; #include <set> using std::set; // write this function to help you out with the computation. unsigned long countLines() { return 1; } unsigned long countWords(const string& s) { int nw =1; for (size_t i = 0; i < s.size(); i++) { if (s[i] == ' ') //everytime the function encounters a whitespace, count increases by 1)// { nw++; } } return nw; } unsigned long countChars(const string& s) { int nc = 0; for (size_t i = 0; i < s.size(); i++) { if ( s[i] != ' ') //everytime the function encounters a character other than a whitespace, count increases// { nc++; } } return nc; } unsigned long countUnLines(const string& s, set<string>& wl) { wl.insert(s); return wl.size(); } unsigned long countUnWords(const string& s, set<string>& wl) { int m1 = 0; int m2 = 0; string substring; for(m2 = 0; m2 <= s.size(); m2++){ if (m2 != ' ' ) substring = s.substr(m1,m2); wl.insert(substring); m1 = m2 + 2;} } return wl.size(); int unw = 0; wl.insert(s); unw++; return unw; } int main() { //stores string string s; //stores stats unsigned long Lines = 0; unsigned long Words = 0; unsigned long Chars = 0; unsigned long ULines = 0; unsigned long UWords = 0; //delcare sets set<string> wl; while(getline(cin,s)) { Lines += countLines(); Words += countWords(s); Chars += countChars(s); ULines += countUnLines(s,wl); UWords += countUnWords(s); cout << Lines << endl; cout << Words<< endl; cout << Chars << endl; cout << ULines << endl; cout << UWords << endl; Words = 0; Chars = 0; ULines = 0; UWords = 0; } return 0; }