| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > STL: text file to vector<string> |
| Автор: John_Doe 16.7.2004, 18:04 |
| Hi all, Подскажите, плз, как считать текстовый файл в vector<string>, чтобы строки не разбивались по пробелам, а только по \n или \r? Делаю так: ifstream ifs("test.txt"); istream_iterator<string> ii(ifs); istream_iterator<string> ieos; vector<string> vs(ii, ieos); засунуть куда-нибудь noskipws не получается... может не туда? ;) Заранее признателен за вашу помощь! |
| Автор: Олег М 19.7.2004, 08:15 | ||
А так не получается?
|
| Автор: Олег М 19.7.2004, 08:54 |
| В смысле cin>>skipws>>str; |
| Автор: John_Doe 19.7.2004, 09:40 |
| Олег, спасибо, конечно, но, простите, где вы видите cin? Если бы я хотел считывать из консоли, то конечно бы именно так и сделал (таких примеров в каждой книжке по С++ достаточно). Но мне нужно именно из файла и с наименьшими усилиями (можно было бы использовать getline() - но это не столь красиво и кратко). |
| Автор: Олег М 19.7.2004, 10:28 | ||
ifs>>skipws>>str; Читаешь в цикле по одной строке и запихиваешь в массив |
| Автор: John_Doe 19.7.2004, 12:10 |
| Так я ж поэтому и упомянул, что решения "в лоб" мне не хочется. Хочется кратко и красиво, как в приведённом мной примере с инициализацией вектора через итераторы входного потока. Поэтому и спросил здесь, надеясь на помощь гуру, а не потому, что просто решения в лоб через ifs.getline(str) - ну или с использованием ifs>>skipws>>str - и push_back(str) мне не известно... Спасибо, Олег, за внимание, но, право слово, хочется красоты. |
| Автор: Олег М 19.7.2004, 12:18 | ||
Молодец! Перепиши оператор >> для своего класса - будет красиво и круто |
| Автор: John_Doe 19.7.2004, 13:14 |
| Типа, красиво никак? Будем искать... |
| Автор: Олег М 19.7.2004, 13:29 | ||
А что ты тогда понимаешь под красотой? Чтобы вручную вообще нифига не писать? |
| Автор: John_Doe 19.7.2004, 15:56 |
| Под красотой я понимаю максимальное использование доступных средств при минимуме рутины. Например, "красивее" использовать for_each вместо прохода с итератором. А если "вообще нифига не писать", то и красоты не будет. Ещё раз повторю - решение в лоб меня не интересовало, тк. я его и сам знал. Хотелось узнать, можно ли сделать красивее с использованием итераторов потока ввода. Если ты уверен, что так сделать нельзя, то нужно было сразу это и сказать... |
| Автор: Morel 20.7.2004, 09:49 | ||
Правда конец строки любой разделитель, но можешь что нибудь дальше сам придумать. |
| Автор: John_Doe 21.7.2004, 15:54 | ||
| Спасибо, Morel. Но скажи, пожалуйста, чем твой вариант отличается от приведённого мной? Для простоты восприятия, можно слегка модифицировать мой пример (поближе к твоему):
Мой вариант делает ровно тоже самое, только короче и понятнее = красивее. Беда только в том, что конец строки не тот, что нужно. |