打印重复的字符串以及它们在文件中出现的次数C ++

时间:2016-10-18 04:12:33

标签: c++

这是我必须解决的问题以及我迄今为止编写的代码。

编写一个名为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语句将为真,并尝试打印该行的最后一个单词。

0 个答案:

没有答案