istringstream c что это

Описание istringstream

Описание функции istringstream
Добрый день, есть такая конструкция istringstream ist(target); while(ist>>cur) <.

Getline and istringstream
int main() < cout 15

Добавлено через 1 минуту
Читай тут

А откуда у нас появляется «word»?

Комментарий модератора
И в то же время «Запрещено накручивать репутацию любым способом, включая создание пользователей-клонов, а также склонять (агитировать) других пользователей к ее повышению.», 3.9

Добавлено через 1 час 6 минут

Ладно, не буду спорить, но во многих разделах, модераторы сами оставляют такие посты, так-что, в каком-то роде, я выполнил вашу роботу.:)

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Проблемка с istringstream
Суть в том, что istringstream() превращает строку в поток и разделителем между словами служит.

Работа с istringstream
#include #include #include int main() < std::string s< "10.

Перевернуть слово istringstream
Объясните пожалуйста работу дальнейшую после 12 строчки, что выполняется, как работает, гугл мне.

Чем заменить istringstream?
Задание:Найти в списке из 7 слов все слова, состоящие из заданного количества букв. #include.

Источник

Что такое C++ Stringstream и как его использовать?

Строковый объект, созданный из строкового класса, представляет собой структуру данных списка. Список представляет собой серию персонажей, и он ценится как таковой. Строковый объект C ++ имеет множество методов. Однако в нем отсутствуют определенные операции, которые лучше всего использовать, если рассматривать его как поток. Вот где на помощь приходит stringstream. Stringstream — это поток, который можно использовать для:

— Подсчитайте количество слов в строковом объекте

— Получить частоту отдельных слов в строковом объекте

— Преобразование слова в текстовой форме в строковом объекте в число и наоборот

Перемещение символов из строкового объекта в программу C ++ является вводом и представлено объектом строкового потока. Выводится перемещение символов из программы C ++ в строковый объект. Stringstream (то есть sstream) использует классы istringstream и ostringstream. Объект, созданный из istringstream, отвечает за ввод символов в поток строк. Объект, созданный из ostringstream, отвечает за вывод символов из строкового потока в строковый объект.

В этом руководстве объясняется, что такое sstream и как его использовать. Целевой строковый объект является частью программы C ++.

Чтобы выполнить ввод, вывод или и то, и другое в одном сеансе, программа на C ++ должна начинаться с:

Создание объекта Stringstream

Известно, что строковый поток может быть объявлен и применен одновременно в одном операторе. Однако в данном руководстве это не тот подход. В этом руководстве объект строкового потока создается из класса в одном операторе и используется в другом операторе.

Stringstream может быть создан для чтения (ввода). Stringstream может быть создан для записи (вывода). Stringstream может быть реализован как для чтения и записи.

Чтобы создать объект потока для чтения, используйте:

где strm — объект потока; а «in» класса ios_base означает чтение.

Чтобы создать объект потока для записи, используйте:

где strm — объект потока; а «вне» класса ios_base означает запись.

Чтобы создать объект потока для чтения или записи, используйте:

где «ios_base :: in | ios_base :: out », предназначен для чтения или записи.

Входная операция Stringstream

Текст для ввода в строковый поток из строкового объекта может быть выполнен двумя способами: с помощью оператора вставки ( #include

using namespace std ;

stringstream strm1 ( ios_base :: in ) ;

strm1 «We are the world!» ;

string stri2 = «This is the earth!» ;

stringstream strm2 ( ios_base :: in ) ;

stringstream strm3 ( ios_base :: in ) ;

strm3. str ( «Mars is next.» ) ;

string stri4 = «What about Jupiter?» ;

stringstream strm4 ( ios_base :: in ) ;

Строковый объект может быть литералом или идентификатором. Обратите внимание, что в объявлении объекта sstream используется «stringstream», а не «sstream», хотя оба термина означают одно и то же. В директиве include следует использовать термин sstream.

Выходная операция Stringstream

Слово — это любой строковый текст, в котором нет пробела (’’). Вывод из строкового потока означает отправку строкового слова из объекта sstream в строковый объект. Для этого нужен оператор извлечения (>>). Следующая программа отправляет слово из объекта sstream в строковый объект:

Источник

Что именно делает stringstream?

Со вчерашнего дня я пытаюсь выучить C ++ и использую этот документ:http://www.cplusplus.com/files/tutorial.pdf (стр. 32). Я нашел код в документе и запустил его. Я попытался ввести Rs 5,5 для цены и целое число для количества, и результат был 0.
Я попытался ввести 5,5 и 6, и вывод был правильным.

Вопрос: Что именно делает команда mystring? Цитата из документа:

«В этом примере мы получаем числовые значения из стандартного ввода
косвенно. Вместо того, чтобы извлекать числовые значения непосредственно из
стандартный ввод, мы получаем строки из стандартного ввода (CIN) в
строковый объект (mystr), а затем мы извлекаем целочисленные значения из
эту строку в переменную типа int (количество). «

У меня сложилось впечатление, что функция будет принимать неотъемлемую часть строки и использовать ее в качестве входных данных.

(Я точно не знаю, как задать вопрос здесь. Я также новичок в программировании)
Спасибо.

Решение

Иногда очень удобно использовать поток строк для преобразования между строками и другими числовыми типами. Использование stringstream похоже на использование iostream так что не бремя учиться.

Строковые потоки могут использоваться как для чтения строк, так и для записи данных в строки. Он в основном работает со строковым буфером, но без реального канала ввода-вывода.

Основные функции-члены класса stringstream:

Вот пример того, как использовать строковые потоки.

istringstream более или менее того же использования.

Подводя итог, струнный поток является удобным способом манипулировать строками как независимое устройство ввода / вывода.

К вашему сведению, отношения наследования между классами:

Другие решения

Ответить на вопрос. stringstream в основном позволяет лечить string объект как stream и использовать все stream функции и операторы на нем.

Я видел, что он используется в основном для форматированного вывода / ввода совершенства.

Один хороший пример будет c++ реализация преобразования номера в потоковый объект.

Также в этом примере string буфер скрыт и не используется явно. Но было бы слишком долго писать о каждом возможном аспекте и сценарии использования.

Примечание: я, вероятно, украл его у кого-то на SO и уточнил, но у меня нет оригинального автора.

istringstream тип читает строка, ostringstream пишет строка, а также stringstream читает и пишет строка.

Я сталкиваюсь с некоторыми случаями, когда это удобно и кратко использовать stringstream.

Случай 1

предполагать a а также b комплексные числа, выраженные в строковом формате, мы хотим получить результат умножения a а также b также в строковом формате. Код выглядит следующим образом:

случай 2

Это также из проблема кода что требует от вас упростить заданную строку пути, одно из решений с использованием stringstream самое элегантное, что я видел:

Без использования stringstream было бы сложно написать такой лаконичный код.

Первым токеном был RS, который не удалось преобразовать в int оставляя ноль для myprice, и мы все знаем, что ноль раз что-либо дает.

Когда вы только ввели значения int во второй раз, все работало так, как вы ожидали.

Это была ложная RS, которая вызвала сбой вашего кода.

Источник

Насколько медленны iostreams?

Потоки ввода-вывода в стандартной библиотеке C++ просты в использовании, типобезопасны, устойчивы к утечке ресурсов, и позволяют простую обработку ошибок. Однако, за ними закрепилась репутация «медленных». Этому есть несколько причин, таких как широкое использование динамической аллокации и виртуальных функций. Вообще, потоки — одна из самых древних частей стандартной библиотеки (они начали использоваться примерно в 1988 году), и многие решения в них сейчас воспринимаются как «спорные». Тем не менее, они широко используются, особенно когда надо написать какую-то простую программу, работающую с текстовыми данными.

Вопрос производительности iostreams не праздный. В частности, с проблемой производительности консольного ввода-вывода можно столкнуться в системах спортивного программирования, где даже применив хороший алгоритм, можно не пройти по времени только из-за ввода-вывода. Я также встречался с этой проблемой при обработке научных данных в текстовом формате.

Сегодня в комментариях у посту возникло обсуждение о медленности iostreams. В частности, freopen пишет

Забавно смотреть на ваши оптимизации, расположенные по соседству со считыванием через cin 🙂

Можно заменить на getchar_unlocked() для *nix или getchar() для всех остальных.
getchar_unlocked > getchar > scanf > cin, где «>» означает быстрее.

В этом посте я развею и подтвержу некоторые мифы и дам пару рекомендаций.

Все измерения в этом посте приведены для системы Ubuntu 14.10 с компилятором GCC 4.9.1, компилировалось с ключами

Запуск проводился на ноутбуке с процессором Intel Core2 Duo P8600 (2.4 ГГц).

Постановка задачи

В спортивном программировании, как и в UNIX-way, обычно входные данные подаются на входной поток. Итак, задача:

На входной поток (stdin) поступает много неотрицательных целых чисел по одному на строке. Программа должна вывести максимальное из входных чисел.

Сформируем входные данные

В файл data мы записали 10 миллионов последовательных целых чисел, общим объёмом 76 мегабайт.
Запускать программу мы будем так

1. scanf

Решим задачу с использованием старого доброго scanf.

Время работы: 1.41 c

2. Наивный std::cin

Теперь решим задачу самым простым способом при помощи iostreams:

Время работы: 4.41 c
Ого! Потоки оказались медленнее чем scanf в 3 раза! То есть выходит, что iostream оказываются действительно никуда не годится по скорости?

3. Быстрый std::cin

На самом деле, чтобы исправить ситуацию, достаточно добавить в программу одну единственную строчку. В самом начале функции main вставим:

Все последующие варианты с использованием std::cin будут использовать эту оптимизацию.

4. Наивный std::istringstream

Помимо ввода из файла, стандартная библиотека предоставляет также классы для ввода из строки с таким же интерфейсом. Посмотрим, насколько это медленно. Будем читать из входного потока по одной строке, а затем парсить её с помощью std::istringstream :

Время работы: 7.21 c
Очень медленно!

5. Переиспользование std::istringstream

Может показаться удивительным, но самое медленное в istringstream — это его создание. А мы создаём для каждой входной строки заново. Попробуем переиспользовать один и тот же объект:

Обратите внимание, что нужны 2 вызова — clear, чтобы сбросить флаги состояния, и str, чтобы задать новый буфер, из которого будет происходить чтение.

Время работы: 2.16 c
Это другое дело. Это ожидаемо медленнее, чем чтение напрямую из std::cin (данные проходят 2 раза через классы потоков), но не катастрофично.

6. Хотим ещё быстрее! (getchar/getchar_unlocked)

7. C++11: std::stoi

Время работы: 1.04 c
Это самый быстрый стандартный способ чтения целых чисел. (А для чисел с плавающей точкой есть аналогичные функции stof/stod).

8. Бонус: Чтение большими блоками + Boost::Spirit

Время работы: 0.18 c
Это рекорд!

Результаты и советы

Время работы:
No Метод GCC 4.9.1 clang 3.5.0 + libc++ GCC 100M*
1 scanf 1.41 1.48
2 std::cin 4.41 13.30
3 std::cin и std::ios::sync_with_stdio(false) 1.33 13.24
4 std::istringstream 7.21 9.16
5 std::istringstream с переиспользованием 2.16 7.92
6a getchar 0.82 0.84 9.14
6b getchar_unlocked 0.28 0.26 2.94
7 std::getline + std::stoi 1.04 3.53 10.8
8 Большой блок + Boost::Spirit 0.18 1.67 1.90

* — Измерения на файле со 100 миллионами чисел (размер файла 848 мегабайт).

Рекомендации:

Update 1. По совету Lol4t0 добавлен метод номер 7.
Update 2. В таблицу добавлены времена выполнения на clang+libc++ (версия 3.5.0, выполнялось на той же системе). Видно, что производительность потоков очень плохая, да к тому же трюк с выключением синхронизации не работает. В результате stoi оказывается в 2 раза медленнее чем scanf.
Update 3. Добавлен вариант номер 8: чтение большими блоками и разбор с помощью Boost::Spirit. И это чемпион!

Источник

В чем разница между istringstream, ostringstream и stringstream? / Почему бы не использовать stringstream в каждом случае?

наконец, есть ли что-то плохое в этом (вместо использования потока вообще):

7 ответов

лично я нахожу очень редким, что я хочу выполнять потоковую передачу в один и тот же поток строк.

обычно я хочу либо инициализировать поток из строки, а затем проанализировать его; или передать вещи в поток строк, а затем извлечь результат и сохранить его.

если вы потоковое и из того же потока, вы должны быть очень осторожны с состоянием потока и потоковых позиций.

здесь может будет некоторое улучшение производительности, но я бы не смотрел на это в первую очередь.

нет ничего плохого в том, что вы написали. Если вы обнаружите, что он работает недостаточно хорошо, вы можете профилировать другие подходы, иначе придерживайтесь того, что яснее всего. Лично я бы просто пошел на:

нет ничего плохого в том, чтобы просто использовать строку, пока она выполняет то, что вы хотите. Если вы просто складываете строки вместе, это легко и работает нормально. Если вы хотите отформатировать другие виды данных, a stringstream будет поддержите это, и строка в основном не будет.

в большинстве случаев вам не понадобятся как входные, так и выходные данные в одном stringstream, поэтому используйте std::ostringstream и std::istringstream явно делает ваше намерение ясным. Это также предотвращает случайное ввод неправильного оператора ( vs >> ).

когда вам нужно выполнить обе операции в одном потоке, вы, очевидно, будете использовать версию общего назначения.

проблемы с производительностью будут наименьшей из ваших проблем здесь, ясность является основным преимущество.

наконец, нет ничего плохого в использовании string append, поскольку вам нужно создавать чистые строки. Вы просто не можете использовать это для объединения чисел, как вы можете в таких языках, как perl.

PS: ничего плохого, просто проблемы с производительностью.

предположительно, когда для вашей операции подходит только вставка или только извлечение, вы можете использовать одну из версий с префиксом » i » или «o», чтобы исключить нежелательную операцию.

Если это не важно, то вы можете использовать ввода-вывода версии.

конкатенации ты показываешь вполне допустимо. Хотя конкатенация с использованием stringstream возможна, это не самая полезная функция stringstreams, которая должна иметь возможность вставлять и извлекать POD и абстрактные типы данных.

зачем открывать файл для чтения и записи, если вам нужно только читать из него, например?

Что делать, если несколько процессов, необходимых для чтения из одного файла?

Источник

Читайте также:  какой камень подходит весам женщинам родившимся в сентябре в год крысы
Сказочный портал