Здравствуйте Аноним, Вы писали:
А>Спасибо за ответ!
А>У меня,видимо, какая-то урезанная версия. <vector> там нет :( и
А>push_back пишет left of '.push_back' must have struct/union type
А>(а на объявление std::string strTmp; пишет
А>syntax error : missing ';' before ':') // stdio.h подключен...
Для подключения вектора и всего остального нужно написать:
#include <vector>
#include <string>
#include <fstream>
А>Можно ли сделать то же самое, только в варианте строк типа С? (т.е. массивы символов?)
Можно, но это будет несколько сложнее.
Последовательность действий может быть например такой:
1. Открываем файл:
FILE* fp = fopen("Твой_файл", "r");
2. Сначала пробегается файл, и подсчитывается количество строк.
3. После того, как кол-во строк известно, выделяем место под массив, который будет хранить указатели на добавляеме строки:
char** aStrings = new char* [nNbOfLines];//nNbOfLines — кол-во строк, подсчитанное на пред. этапе.
4. Заполняем массив, читая последовательно строки:
int i = 0;
char buf[1024] = {0};//Чтобы влезла самая длинная строка
char* pStr;
while(fgets(buf, 1023, fp))
{
if(!strlen(buf))
continue;
pStr = new char [strlen(buf) + 1];
strcpy(pStr, buf);
aStrings[i++] = pStr;
}
5. После завершения работы с массивом освободить память:
for(int j = 0; j < nNbOfLines; ++j)
delete [] aStrings[i];
delete [] aStrings;
И главное — нигде не ошибиться с количеством строк при повторных проходах по файлу.
Согласись, что с помощью STL все получается несколько проще... ;)