2016-10-02 73 views
-4

有沒有一種方法可以按字母順序排列顯示在同一行上的單詞?我知道,如果我有一個新的一行字,我能夠將它們輕鬆地使用排序:使用sort()對文件中的同一行進行排序

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(貓猿蝙蝠)。有沒有簡單的方法來在C++中做到這一點?我會不會做getline一點,因爲我只抓住一條線?我將如何處理這個問題?

+1

要回答提出的問題:是的,有一個簡單的方法在C++中執行此操作。 –

+0

您是否只需要在一行上對單詞進行排序所需的基本編碼?試圖解析未被空格分隔的單詞看起來像是一個單獨的(而且更難)的問題。 – Zong

+2

你在一行上有非分隔的單詞,並且想閱讀它們嗎?讓我們說,而不是「貓」「猿」和「蝙蝠」,它包含「一個」和「完成」。沒有空格,這是'adone',然後可以用不同的方式拆分爲「ad」和「one」。你在這種模棱兩可的情況下做什麼?有沒有一個允許的詞的字典? – apnorton

回答

2
  1. 使用getline來讀取一行。
  2. 從字符串的istringstream你剛纔讀
  3. 從那裏讀單詞爲vector<string>
  4. 排序的話在矢量
0

我會建議找一個單詞字典,如this,並將每個單詞與字符串的開頭進行比較。如果匹配,則從字符串的開頭刪除多個字符,並將該單詞存儲在數組中。重複此操作直到獲得包含所有單詞的數組,然後按字母順序對數組進行排序。

注意:這可能是值得通過整個字典和跟蹤每個匹配的單詞。一旦詞典耗盡,請在繼續之前選擇最長匹配作爲單詞。

+0

這將如何處理像「飛機」或「未完成」這樣的詞,或者許多其他詞可能是他們自己的詞,還是更大的詞的一部分? – Tas

+1

理論上它會將較大的複合詞讀作1個單詞。一個最佳策略會嘗試每個成功單詞的組合。例如:「airplanesodapop」將產生輸出:「空中,飛機,蘇打水,流行音樂」,「飛機,sodapop」,「空中,飛機,sodapop」,「空中,飛機,sodapop」 – Keco

相關問題