Форум программистов, компьютерный форум CyberForum.ru

Delim в функции getline() - C++

Восстановить пароль Регистрация
 
SKS-65
5 / 5 / 1
Регистрация: 18.10.2011
Сообщений: 187
15.11.2014, 21:23     Delim в функции getline() #1
Здравствуйте. Встала проблема, что при чтении файла нужно использовать разные разделяемые символы (.,!? и т.д.). Пробовал использовать функцию getline, как while(getline(stream,s,'.') || getline(stream,s,',' ....), но это работает только относительно того, что первое в while, то есть только относительно точки. Подскажите идею как можно сделать, может другой метод какой есть. Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2014, 21:23     Delim в функции getline()
Посмотрите здесь:

C++ Почему портится поток cin при использовании функции getline
getline C++
Getline C++
C++ Отличие функции cin.get и cin.getline
getline() C++
Отсутствуют экземпляры перегруженной функции getline C++
Работа с динамической памятью. Ошибка в функции getline через посимвольный ввод C++
Отличие getline() от cin.getline() C++
C++ Реализация своей функции getline
Объясните разницу между "cin.getline" и "std::getline" C++
C++ Третий аргумент функции sdt :: getline
Как узнать, был ли найден в строке, читаемой с помощью функции std::getline(), символ \n ? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
hoggy
5426 / 2225 / 410
Регистрация: 15.11.2014
Сообщений: 5,016
Завершенные тесты: 1
15.11.2014, 22:05     Delim в функции getline() #2
Честно говоря, я и сам когда то озадачился подобным вопросом.
Но объектно ориентированного стандартного решения так и не нашел.

В качестве обходного пути можно использовать сишный strtok
http://www.cplusplus.com/reference/cstring/strtok/
SKS-65
5 / 5 / 1
Регистрация: 18.10.2011
Сообщений: 187
15.11.2014, 23:31  [ТС]     Delim в функции getline() #3
hoggy, спасибо большое
Somebody
2775 / 1588 / 142
Регистрация: 03.12.2007
Сообщений: 4,162
Завершенные тесты: 1
15.11.2014, 23:44     Delim в функции getline() #4
Можно, например, классифицировать все нужные символы как пробельные, тогда они будут пропускаться без проблем:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <algorithm>
#include <fstream>
#include <iostream>
#include <locale>
#include <string>
 
class CustomSeparators : public std::ctype<char>
{
public:
    explicit CustomSeparators(size_t refs = 0) : ctype(newTable, false, refs)
    {
        const mask* oldTable = classic_table();
        std::copy(oldTable, oldTable + table_size, newTable);
        for (unsigned char c : ".,!?")
            newTable[c] |= space;
    }
private:
    mask newTable[table_size];
};
 
int main()
{
    std::ifstream fin("input.txt");
    fin.imbue(std::locale(fin.getloc(), new CustomSeparators));
    std::string s;
    while (fin >> s)
        std::cout << s << std::endl;
}
hoggy
5426 / 2225 / 410
Регистрация: 15.11.2014
Сообщений: 5,016
Завершенные тесты: 1
15.11.2014, 23:48     Delim в функции getline() #5
Кстати, очевидно, что мы не единственные, кто был озадачен этим вопросом.
Загуглил:
http://www.codeproject.com/Articles/...lus-e-plusstrt

Вещь не проверял.
Но может быть вам она понравится...
Yandex
Объявления
15.11.2014, 23:48     Delim в функции getline()
Ответ Создать тему
Опции темы

Текущее время: 23:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru