Чтение текстовых строк, их сортировка и запись в новый текстовый файл - PullRequest
0 голосов
/ 04 августа 2011

Я изо всех сил пытался написать программу, которая могла бы решить конкретную проблему для меня, я не использую c ++ с тех пор, как несколько лет, из-за чего мне было трудно завершить программу вовремя. У меня есть текстовые данные, такие как:

10929 12490 1023 12 29 10 92 96 100 10
10929 12290 1023 10 29 10 95 90 90 10
10929 12190 1023 12 29 10 93 91 80 12
10929 12590 1023 10 29 10 97 90 70 10
10929 12490 1023 12 29 10 92 96 100 11
10929 12290 1023 10 29 10 95 90 90 10
10929 12190 1023 12 29 10 93 91 80 10
10929 12590 1023 10 29 10 97 90 70 10

Мне нужно отсортировать данные так, чтобы в новом файле были все 100 и, соответственно, то же самое для 90-х, 80-х и 70-х годов (обратите внимание на второй столбец справа).

Моя основная проблема до сих пор заключается в сохранении каждой отдельной строки в массив строк, чтобы их было легко сортировать. Я имел в виду следующую форму: array [line_data, line_number]

Буду признателен за любую помощь в этом вопросе, Спасибо за ваше время

Ответы [ 2 ]

0 голосов
/ 04 августа 2011

Если вы просто хотите, чтобы данные были сохранены в массиве типа "array [line_data, line_number]", вы можете сделать это:

  1. открыть файл, используя ifstream
  2. usestd :: getline для чтения каждой строки
  3. сохранить данные из getline в контейнер

, поэтому чтение будет выглядеть так, если вы используете std :: ifstream named "file "и контейнер с именем storage:

std::string str;
std::list<std::string> storage; 
//or std::vector<std::string>, depends on how much you have to read in

while(std::getline(file,str))
{
     storage.push_back(str);
}

При этом в хранилище [0] будет первая строка вашего текстового файла.

0 голосов
/ 04 августа 2011
  1. чтение файла построчно.вы можете использовать fgets для этого
  2. добавить каждую строку в список (ex std: list), который содержит строку и значение (sscanf_s ("% d% d% d ..."), чтобы получить второе значение изсправа)
  3. сортировка с использованием std: stable_sor
  4. запись всего в выходной файл

Пример

struct tagITEM {char*   szLine;  int    iSort;}ITEM, *pITEM;

std::list<ITEM> lItems;

inline bool lt_ItemCmp(ITEM& c1, ITEM& c2) { return c1.iLine < c2.iLine; }

std::stable_sort(lItems.begin(), lItems.end(), lt_ItemCmp);

обратите внимание, что приведенный выше код не былпротестирован

...