这是我必须解决的问题以及我迄今为止编写的代码。
编写一个名为printDuplicates的函数,它接受输入流和输出流作为参数。
输入流表示包含一系列行的文件。您的函数应检查每一行,查找同一行上连续出现的同一令牌,并按连续出现的次数打印每个重复的令牌。
不打印非重复令牌。在这个问题中不考虑重复多行(例如,如果一行以给定的标记结束而下一行以相同的标记开头)。
例如,如果输入文件包含以下文本:
你好,你是怎么做到的?
我是杰克杰克斯傻笑的傻笑,傻笑的傻笑?
bow wow wow yippee yippee yo yippee yippee yay yay yay
一条鱼两条鱼红鱼蓝鱼
这是布偶秀,wakka wakka wakka
我的预期结果应为:
如何* 2你* 4
I * 3 Jack's * 2傻笑* 5
哇* 2 yippee * 2 yippee * 2 yay * 3
\n
瓦卡* 3
这是我的功能:
1 void printDuplicates(istream& in, ostream& out)
2 {
3 string line; // Variable to store lines in
4 while(getline(in, line)) // While there are lines to get do the following
5 {
6 istringstream iss(line); // String stream initialized with line
7 string word; // Current word
8 string prevWord; // Previous word
9 int numWord = 1; // Starting index for # of a specific word
10 while(iss >> word) // Storing strings in word variable
11 {
12 if (word == prevWord) ++numWord; // If a word and the word 13 before it are equal add to word counter
14 else if (word != prevWord) // Else if the word and the word before it are not equal
15 {
16 if (numWord > 1) // And there are at leat two copies of that word
17 {
18 out << prevWord << "*" << numWord << " "; // Print out "word*occurrences"
19 }
20 numWord = 1; // Reset the num counter variable for next word
21 }
22 prevWord = word; // Set current word to previous word, loop begins again
23 }
24 out << endl; // Prints new line between each iteration of line loop
25 }
26 }
到目前为止我的结果是:
如何* 2
I * 3 Jack's * 2傻笑* 5
哇* 2 yippee * 2 yippee * 2
我尝试添加( || iss.eof()),( || iss.peek == EOF )等在第14行上的嵌套else if语句中,但我无法想象这个人。我需要某种方式知道我在行的末尾,所以我的其他if语句将为真,并尝试打印该行的最后一个单词。