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

C++

Войти
Регистрация
Восстановить пароль
 
SKS-65
5 / 5 / 1
Регистрация: 18.10.2011
Сообщений: 187
#1

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

15.11.2014, 21:23. Просмотров 1091. Ответов 4
Метки нет (Все метки)

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

Вопрос про getline - C++
Читая ман по getline, я наткнулся на интересный для меня момент:DESCRIPTION getline() reads an entire line from stream, storing...

Как с помощью getline считать двухбайтовые символы? - C++
В общем надо считать строку из файла. Если однобайтовая - всё ок. Как только wchar_t - начинается дурдом. getline в упор не видит какой...

В чем ошибка 'GetLine' - C++ Builder
Выдает ошибку DB.cpp(99): E2268 Call to undefined function 'GetLine' Подскажите пожалуйста в чем проблема. В этом деле новичок. void...

Считать строку getline и вывести ее в ListBox - C++ WinAPI
считываю строки из файла и пытаюсь вывести в ListBox. Если в файле записано: 1 2 3 то в ListBox они выводятся 1|||||||| ...

Реализация своей функции getline - C++
Здравствуйте! Не могу решить задачку. Постановка: Реализуйте функцию getline, которая считывает поток ввода посимвольно, пока не...

Третий аргумент функции sdt :: getline - C++
Можно ли использовать в качестве третьего аргумента слово в функции std :: getline ? Если можно, то как ? Нужно нечто похожее на это : ...

4
hoggy
6652 / 2838 / 486
Регистрация: 15.11.2014
Сообщений: 6,270
Завершенные тесты: 1
15.11.2014, 22:05 #2
Честно говоря, я и сам когда то озадачился подобным вопросом.
Но объектно ориентированного стандартного решения так и не нашел.

В качестве обходного пути можно использовать сишный strtok
http://www.cplusplus.com/reference/cstring/strtok/
0
SKS-65
5 / 5 / 1
Регистрация: 18.10.2011
Сообщений: 187
15.11.2014, 23:31  [ТС] #3
hoggy, спасибо большое
0
Somebody
2789 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
15.11.2014, 23:44 #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;
}
2
hoggy
6652 / 2838 / 486
Регистрация: 15.11.2014
Сообщений: 6,270
Завершенные тесты: 1
15.11.2014, 23:48 #5
Кстати, очевидно, что мы не единственные, кто был озадачен этим вопросом.
Загуглил:
http://www.codeproject.com/Articles/...lus-e-plusstrt

Вещь не проверял.
Но может быть вам она понравится...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2014, 23:48
Привет! Вот еще темы с ответами:

Отсутствуют экземпляры перегруженной функции getline - C++
не могу решить проблему #define _CRT_SECURE_NO_WARNINGS #include &quot;stdafx.h&quot; #include &quot;conio.h&quot; #include &quot;stdio.h&quot; #include...

Некорректный ввод строк с использованием функции getline - C++
Здравствуйте столкнулся с магической проблемой функция getline(); криво работает когда вызывается с другой функции. #include...

Почему портится поток cin при использовании функции getline - C++
char a; cin.getline(a,5); cin.clear(); При вводе свыше 5 символов после функции getline надо вызывать функцию clear() иначе...

Отличие getline() от cin.getline() - C++
Чем отличается getline() от cin.getline() ?


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
15.11.2014, 23:48
Ответ Создать тему
Опции темы

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