查找单词最多的行并将其输出到文本文件中.C++

Finding the line that has the most words and output it to text file. C++

本文关键字:输出 文本 文件 C++ 单词最 查找      更新时间:2023-10-16

所以我有一个大约有5-6行文本的文件,我需要找到哪一个单词最多,并将其输出到另一个文件中。你们有什么建议吗?

我在C++方面没有那么高级,我使用类、数组,没有向量之类的。

其他代码在我的程序中是不相关的,但如果你需要它,我会把它粘贴在这里。

编辑:http://pastebin.com/zh7HPCtT这是我的代码,它的第一部分计算一行中有多少单词比第一个单词长。

我没有为任务的另一半添加任何其他内容。

试试这个:

  • 读取每一行
  • 数数里面的单词
  • 如果它的单词比你看到的任何其他行都多,请保存它
  • 文件用完后,打印保存的行

最简单的解决方案之一是使用将在循环中使用的字符串max

然后在文件中的所有行上循环,对于每一行line,将line中的字数与max中的字数进行比较,如果line中的字数更多,则将其分配给max

完成所有行的操作后,打开一个文件或直接转储到标准输出(使用户可以将输出重定向到某个文件本身),然后打印max

核心算法非常类似于找到两个数字的最大值,事实上,您可以使用标准库中的std::max,并使用自己的比较器。


只是为了好玩,这里有一个非常次优的解决方案:

#include <algorithm>
#include <sstream>
#include <string>
#include <iostream>

std::string longest_phrase (std::istream &is) {
    std::string longest, current_line;
    while (getline(is, current_line))
        longest = max(longest, current_line, [] (std::string const &lhs, std::string const &rhs) {
            std::stringstream lhss(lhs), rhss(rhs);
            std::string sink;
            int words_lhs = 0, words_rhs = 0;
            while (lhss >> sink) ++words_lhs;
            while (rhss >> sink) ++words_rhs;
            return words_lhs < words_rhs;
        });
    return longest;
}
std::string longest_phrase (std::string const &content) {
    std::istringstream ss(content);
    return longest_phrase(ss);
}

int main () {
    std::cout << longest_phrase("Hello, I am a cat!n"
                                "Hello, I am an unhappy bear!n"
                                "Pardon?!n"
                                "WtfOMG!?=§"$%&/!!?µ€@+%$§==!!!") << 'n';
}

它将输出Hello, I am an unhappy bear!n。有很多资源浪费,你应该让它更有状态,但它会为你提供一个起点。