[Перепечатано] Распространенное использование класса stringstream в C ++

Эта статья в основном знакомит с распространенным использованием класса 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 (""):

 

Оригинальный текст воспроизводится с https://blog.csdn.net/liitdar/article/details/82598039

рекомендация

отwww.cnblogs.com/PennyXia/p/12743255.html