Эта статья в основном знакомит с распространенным использованием класса stringstream в C ++.
1 Обзор
<sstream> определяет три класса: istringstream, ostringstream и stringstream, которые используются для операций ввода, вывода и ввода и вывода потока соответственно. Эта статья фокусируется на потоке строк, представляя операции ввода и вывода потока.
<sstream> в основном используется для преобразования типов данных, поскольку <sstream> использует строковые объекты вместо символьных массивов (метод snprintf), что позволяет избежать опасности переполнения буфера, более того, параметры и типы целевых объектов автоматически выводятся Выход, так что нет проблем с неправильным форматером. Проще говоря, по сравнению с преобразованием типов данных библиотеки C, <sstream> является более безопасным, автоматическим и прямым.
2 Пример кода
2.1 Преобразование типов данных
Вот пример кода, который представляет процесс преобразования типа int в строковый тип. Пример кода (stringstream_test1.cpp) выглядит следующим образом:
1 #include < string > 2 #include <sstream> 3 #include <iostream> 4 #include <stdio.h> 5 6 с использованием пространства имен std; 7 8 int main () 9 { 10 stringstream sstream; 11 string strResult; 12 int nValue = 1000 ; 13 14 // Поместить значение типа int во входной поток 15 sstream << nValue ; 16 // Извлечь значение типа int, вставленное ранее из sstream, и присвоить его типу строки 17 sstream >> strResult; 18 19 cout << " [cout] strResult is: " << strResult << endl ; 20 printf ( " [printf] strResult is:% s \ n " , strResult.c_str ()); 21 22 возврат 0 ; 23 }
Скомпилируйте и выполните приведенный выше код, результаты следующие:
2.2 Многострочная конкатенация
В этом примере вводится хранение нескольких строк в потоке строк для достижения цели объединения нескольких строк (фактически это может быть достигнуто с использованием класса строк), и в то же время вводится пустой метод stringstream.
Пример кода (stringstream_test2.cpp) выглядит следующим образом:
1 #include < string > 2 #include <sstream> 3 #include <iostream> 4 5 используя пространство имен std; 6 7 int main () 8 { 9 stringstream sstream; 10 11 // stream 多个 字符串 放入 sstream 中 12 sstream << " first " << " " << " string, " ; 13 sstream << « вторая строка » ; " strResult is: " << sstream.str () << endl; 15 16 // stream sstream 17 sstream.str ( "" ); 18 sstream << « третья строка » ; 19 cout << " После очистки strResult будет: " << sstream.str () << endl; 20 21 возврат 0 ; 22 }
Скомпилируйте и выполните приведенный выше код, результаты следующие:
Из приведенных выше результатов выполнения кода мы можем узнать:
- Вы можете использовать метод str () для преобразования типа stringstream в тип string;
- Несколько строк могут быть помещены в stringstream для достижения цели конкатенации строк;
- Если вы хотите очистить поток строк, вы должны использовать метод sstream.str (""); метод clear () подходит для сценариев, в которых выполняется несколько преобразований типов данных. Смотрите пример 2.3 для деталей.
2.3 Опорожнение струнного потока
Существует два метода очистки stringstream: метод clear () и метод str (""). Эти два метода имеют разные сценарии использования. Сценарии использования метода str ("") были представлены в вышеприведенном примере. Вот сценарии использования метода clear (). Пример кода (stringstream_test3.cpp) выглядит следующим образом:
1 #include <sstream> 2 #include <iostream> 3 4 с использованием пространства имен std; 5 6 int main () 7 { 8 stringstream sstream; 9 int first, second; 10 11 // Вставить строку 12 sstream << " 456 " ; 13 // Преобразовать в тип int 14 sstream >> first; 15 cout << first << endl; 16 17 // Перед выполнением нескольких преобразований типов сначала необходимо выполнить clear () 18 sstream.clear (); 19 20 // Вставить значение bool 21 sstream << true ; 22 // Преобразовать в тип int 23 sstream >> second; 24 cout << second << endl; 25 26 return 0 ; 27 }
Скомпилируйте и выполните приведенный выше код, результаты следующие:
Примечание. В сценарии, который используется в этом примере (многократное преобразование типов данных), необходимо использовать метод clear () для очистки потока строк; без использования метода clear () или метода str ("") невозможно получить правильный результат преобразования типов данных. , На следующем рисунке показаны результаты выполнения, когда метод clear () не используется и используется метод str (""):