C ++:从文本文件中读取单行,按字母顺序对单词进行排序

Posted

技术标签:

【中文标题】C ++:从文本文件中读取单行,按字母顺序对单词进行排序【英文标题】:C++: Read individual lines from text file, sort words alphabetically 【发布时间】:2013-08-12 19:16:52 【问题描述】:

我创建了一个包含 3 行随机单词的文本文件。我想:

单独读取文件中的每一行。 按字母顺序对每行中的单词进行排序 将排序后的行输出到控制台。

这是我目前想出的 [runnable]:https://gist.github.com/anonymous/6211515

它读取行并将它们放入向量中,对该向量进行排序,然后将结果向量打印到控制台。但我只是对行进行排序,而不是对实际单词进行排序。我将整行作为字符串输入,这导致了我的问题。我对 C++ 编程非常陌生,我不确定应该怎么做才能对实际单词进行排序,而不是对行进行排序。

这不是家庭作业,只是建议我解决的一个问题,以便为即将到来的考试做准备。最重要的是解决方案尽可能简单,因为这次考试将使用笔和纸完成。

【问题讨论】:

【参考方案1】:

至少如果我正确理解你想要什么,我会做这样的事情:

    std::getline将一行读入字符串。 从字符串初始化std::stringstream 将字符串流中的单词读入向量中 对向量进行排序 将排序后的单词写入输出。 重复直到完成。

【讨论】:

谢谢,这听起来像是我正在寻找的解决方案。我不确定我将如何实现这一点!我以前从未使用过字符串流。这两天我才知道向量和排序! @Haugum:字符串流的工作方式与其他流一样,因此您可以(例如)使用类似:while (your_stream >> word) words.push_back(word);【参考方案2】:

您正在寻找的是lexicographical sorting 算法。这意味着,对单词进行排序就像在字典中一样,按字母顺序排列。

标准 c++ 支持该算法。看这里:http://www.cplusplus.com/reference/algorithm/lexicographical_compare/

为了访问实现只需#include <algorithm>

【讨论】:

【参考方案3】:

我假设您想编写一个算法来执行此操作,而不是使用任何预先编写的东西。

一旦向量中有字符串,现在您需要将每个字符串分成单词。因此,您可能希望遍历向量中每个字符串中的每个字符,找到空格(或文件使用的任何分隔符),然后将每个空格之前的所有内容放入另一个向量中。并在记录后从字符串中删除每个空格之前找到的所有内容,以便它不会再次出现。 现在你有了一个单词向量。然后按照您当前排序 text_file 的方式对该向量进行排序。

【讨论】:

以上是关于C ++:从文本文件中读取单行,按字母顺序对单词进行排序的主要内容,如果未能解决你的问题,请参考以下文章

C++ 从文本文件中逐字读取单词或逐字符读取单词

Java 大文件排序器

根据重复次数对输入文本中的单词进行排序?

从文本文件中读取单词并存储到 C 中的动态数组 Valgrind 错误中

从具有单独行的字符串的文本中查找重新排列的字符串组

c_cpp 从一个文件中搜索palindroms并将其按字母顺序放在另一个文件中