6 / 6 / 4
Регистрация: 18.10.2011
Сообщений: 187

Delim в функции getline()

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

Студворк — интернет-сервис помощи студентам
Здравствуйте. Встала проблема, что при чтении файла нужно использовать разные разделяемые символы (.,!? и т.д.). Пробовал использовать функцию getline, как while(getline(stream,s,'.') || getline(stream,s,',' ....), но это работает только относительно того, что первое в while, то есть только относительно точки. Подскажите идею как можно сделать, может другой метод какой есть. Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.11.2014, 21:23
Ответы с готовыми решениями:

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

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

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

4
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
15.11.2014, 22:05
Честно говоря, я и сам когда то озадачился подобным вопросом.
Но объектно ориентированного стандартного решения так и не нашел.

В качестве обходного пути можно использовать сишный strtok
http://www.cplusplus.com/reference/cstring/strtok/
0
6 / 6 / 4
Регистрация: 18.10.2011
Сообщений: 187
15.11.2014, 23:31  [ТС]
hoggy, спасибо большое
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
15.11.2014, 23:44
Можно, например, классифицировать все нужные символы как пробельные, тогда они будут пропускаться без проблем:
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
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
15.11.2014, 23:48
Кстати, очевидно, что мы не единственные, кто был озадачен этим вопросом.
Загуглил:
http://www.codeproject.com/Art... e-plusstrt

Вещь не проверял.
Но может быть вам она понравится...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.11.2014, 23:48
Помогаю со студенческими работами здесь

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

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

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

Работа с динамической памятью. Ошибка в функции getline через посимвольный ввод
Было дано вот такое задание: В этой задаче вам необходимо написать функцию getline, которая читает строку из стандартного потока ввода...

Как узнать, был ли найден в строке, читаемой с помощью функции std::getline(), символ \n ?
Как узнать результат работы в std::getline(SS, Res, '\n'); был найден в потоке первод строки или нет?


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru