Вопрос № 178267: Нужно реализовать чтение из файла, по тому принципу, по которому он сохраняется const int N=3; void SaveToFile(MyList *mylist) { ofstream fp; ITEM *CurrentItem; fp.open("country.txt"); for (int i=0;i<myli...
Вопрос № 178267:
Нужно реализовать чтение из файла, по тому принципу, по которому он сохраняется
Получается так //country.txt windows xp 1000|vista 2000|seven 3000| web html 1000|xml 2000|php 3000|
void LoadFromFile(MyList *mylist) { NumberOfString = нужно определить сколько в файле строк i=0; while (i<N && i<NumberOfString) { обрабатывем первую строку первое сло
во присваемаем к mylist->list[i].Name, while(пока не дошли до конца строки '\n') { здесь два элемента слово и число CurrentItem->Name << ' ' << CurrentItem->Number << '|'; } i++; } }
Отвечает lamed, Бакалавр :
Здравствуйте, prolang! Поскольку в свободном доступе тестирующего модуля нет, я позволил себе некоторые упрощения. Вместо динамического списка используется статический массив, соответственно, в структуру потребовалось внести номер последней пары списка. Code::Blocks/G++.
Код:
#include
<iostream> #include <fstream> #include <string> using namespace std;
const int items=10; struct TPair { string name; int value; };
struct TMyList { string key; int last_pair; TPair pairs[items]; };
int main() { const int n=100; string line;
TMyList ml[n]; int status; size_t found;
ifstream in("in");
if (!in) { cerr << "Unable to read from this file" << endl; system("Pause"); exit(1); }
int i=-1; int j; status = 0; // Новая строка массива while (in >> line) { if (status == 0) { i++; ml[i].key = line; status = 1; j = 0; } else { found = line.find("|");
if (found == -1) // Нет символа | в строке названия ml[i].pairs[j].name = line; else { // Преобразуем строку цифр в целое число int num = 0; for (int k=0; k<found; k++) num = num*10+line[k]-'0';
ml[i].pairs[j].value = num; if (found == line.length()-1) // Значение послед
ней пары в строке { status = 0; // Новая строка ml[i].last_pair = j; } else { ml[i].pairs[++j].name = line.substr(found+1); // Продолжаем список пар в текущей строке } } } }
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.