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

C++ 使用sort()对文件中同一行上的单词进行排序,c++,sorting,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(),

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

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";

但是,如果这些单词在文件中的一行没有空格分隔,例如:catapebatcat ape bat,该怎么办呢。在C++中有没有一种简单的方法?我不会做getline位,因为我只抓取一行吗?我该如何解决这个问题?

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

注意:可能值得通读整本词典并跟踪每个匹配的单词。词典用完后,选择最长匹配项作为单词,然后继续

使用getline读取一行。 从刚才读取的字符串创建istringstream 把单词读成向量 对该向量中的单词进行排序
回答问题:是的,在C++中有一个简单的方法来做这件事。你是否只是在一行中需要对基本单词进行排序所遇到的问题?试图解析不以空格分隔的单词似乎是一个独立且困难的问题。您在一行中有非分隔的单词,是否要阅读它们?让我们说,它不是猫猿和蝙蝠,而是包含了一个和完成。如果没有空格,这就是adone,然后可以以不同的方式拆分为ad和one。在这种模棱两可的情况下你会怎么做?是否有一个允许使用的单词词典?现在我的问题是对出现在一行中的单词进行排序。我仍在试图弄清楚我将如何进行解析。@apnorton我的问题并没有那么复杂。我只是在搜索特定长度的记录。因此,我可以很容易地对每三个字符进行拆分,也许?这将如何处理像“飞机”或“未完成”这样的单词,或者许多其他可能是它们自己的单词,或者是一个更大单词的一部分的单词?理论上,它将把更大的复合单词读为一个单词。最佳策略是尝试成功词汇的每一个组合。例如:airplanesodapop将导致输出:air、plane、soda、pop plane、sodapop air、plane、sodapop air、plane、sodapop air