2016-10-02 2 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

У вас есть неразделимые слова на одной строке и вы хотите их прочитать? Скажем, вместо «кошки» «обезьяна» и «летучая мышь» она содержала «a» и «done». Без пробелов это «adone», и тогда их можно разделить по-другому как «объявление» и «одно». Что вы делаете в двусмысленных случаях? Есть ли словарь допустимых слов? – apnorton

ответ

2
  1. Используйте getline, чтобы прочитать строку.
  2. Создание istringstream из строки вы только что прочитали
  3. Прочитайте слова оттуда в vector<string>
  4. Сортировка слов в этом векторе
0

Я бы предложил получить словарь слов типа this и сравнить каждое слово с началом строки. Если есть совпадение, вы удаляете столько символов из начала строки и сохраняете это слово в массиве. Повторяйте это, пока не получите массив, содержащий все слова, а затем отсортируйте массив по алфавиту.

Примечание: Возможно, стоит пройти весь словарь и отслеживать каждое соответствующее слово. Как только словарь исчерпан, выберите самое длинное совпадение в качестве слова, прежде чем продолжить.

+0

Как бы это касалось таких слов, как «самолет» или «отмененный», или многие другие слова, которые могли бы быть их собственным словом или частью более крупного слова? – Tas

+1

Теоретически он читал бы более сложное слово как одно слово. Оптимальная стратегия будет использовать каждую комбинацию успешных слов. Например: «airplanesodapop» приведет к выходу: «воздух, самолет, сода, поп», «самолет», «sodapop», «воздух, плоскость, sodapop», «воздух, самолет, sodapop», – Keco

Смежные вопросы