查找具有最多单词的行并将其输出到文本文件。 C ++

时间:2013-11-27 14:38:24

标签: c++ string

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

我在C ++中并不高级,我使用类,数组,没有向量等。

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

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

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

2 个答案:

答案 0 :(得分:3)

试试这个:

  • 阅读每一行
  • 计算其中的单词
  • 如果它比你见过的任何其他行有更多的单词,请保存
  • 文件耗尽后,打印保存的行

答案 1 :(得分:0)

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

然后循环浏览文件中的所有行,并为每行lineline中的字数与max中的字数进行比较,如果line 1}}有更多单词,将其分配给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。有很多资源浪费,你应该让它更有状态,但它会为你提供一个起点。