使用sort()对文件中同一行上的单词进行排序

时间:2016-10-02 01:38:49

标签: c++ sorting

有没有办法按字母顺序对出现在同一行的单词进行排序?我知道如果我在一个新行上有单词,我可以使用以下方法对它们进行排序:

vector<string> file;
string line;
file.clear();
ifstream infile("foo.txt", ios_base::in);
infile.seekg(3);
while (getline(infile, line)){
    file.push_back(line);
}
sort(file.begin(), file.end());
ofstream outFile;
outFile.open("foo.txt");
for (const auto &e : file) outFile << e << "\n";

但是如果单词在文件中的一行(未分隔空格),例如:catapebat(cat ape bat),该怎么办?有没有一种简单的方法在C ++中执行此操作?我不会做getline位,因为我只抓一条线?我该如何处理这个问题?

2 个答案:

答案 0 :(得分:2)

  1. 使用getline读取一行。
  2. 从您刚刚阅读的字符串中创建istringstream
  3. 从那里读取单词到vector<string>
  4. 对该向量中的单词进行排序

答案 1 :(得分:0)

我建议你找一个像this这样的单词字典,并将每个单词与字符串的开头进行比较。如果匹配,则从字符串的开头删除那么多字符并将该字存储在数组中。重复此操作,直到获得包含所有单词的数组,然后按字母顺序对数组进行排序。

注意:可能值得浏览整个字典并跟踪每个匹配的字词。字典用完后,在继续之前选择最长的匹配作为单词。