stringstream用法总结
目錄
一、概念
二、基本功能
功能一:預定的格式將程序中的數據保存在一個string 中
功能二:實現類型轉換
?????????功能三:實現任意類型轉換
三、重要功能
1.數字由空格或逗號分開。
2.數字由逗號分開
3.數字間不止一類符號分隔
一、概念
C++引入了ostringstream、istringstream、stringstream這三個類,要使用他們創建對象就必須包含sstream.h頭文件。
istringstream類用于執行C++風格的串流的輸入操作。?
ostringstream類用于執行C風格的串流的輸出操作。?
strstream類同時可以支持C風格的串流的輸入輸出操作。
istringstream類是從istream和stringstreambase派生而來,ostringstream是從ostream和 stringstreambase派生而來, stringstream則是從iostream類和stringstreambase派生而來。
他們的繼承關系如下圖所示:
istringstream是由一個string對象構造而來,istringstream類從一個string對象讀取字符。?
istringstream的構造函數原形如下:?
C++ stringstream 類是一種十分有用的類,特別是當我們需要在程序中使用字符串和數字數據的時候。要想在程序中使用 stringstream 類,我們需要在源程序文件中包含頭文件include<sstream>。stringstream 對象的使用方法與cout對象的使用方法基本相同。stringstream 類提供的函數,將數字化轉化為字符串。
當我們需要按預定的格式將程序中的數據保存在一個string 中的時候,可以先創建一個stringstream 對象,并通過運算符 ”<<“ 將數據傳遞給 stringstream 對象。(這與通過”<<“ 使用cout 對象的方法相同。)接著,我們可以通過調用stringstream 類的函數str() 將對象所包含的內容賦給一個string對象。在一下的程序中,我們先將數據傳遞給一個stringstream 對象,然后通過該 stringstream 對象將數值賦給一個string 對象。住:cout能使用的所有ios格式標記也可以在stringstream 對象中使用。
二、基本功能
功能一:預定的格式將程序中的數據保存在一個string 中
// 如何使用 stringstream // 對象生成格式化的 string#include <iostream> #include <string> #include <sstream> using namespace std;int main() {cout << "\n Welcome to the StringStream Demo program.\n";// 構建一些將在string中出現的數據變量// PI 精確到小數點后15位double pi = 3.141592653589793;float dollar = 1.00;int dozen = 12;string text;// 我們希望tring 的格式如下:// dozen適12,dollar是$1.00// 精確到小數點后10為pi是3.141592653589793// 生成stringstream 對象stringstream ss;// 現在像使用cout一樣使用ssss << " A dozen is "<< dozen << ", a dollar is $ ";ss.setf(ios::fixed);ss.precision(2);ss << dollar << " and \n the value of pi to 10 places is ";ss.precision(10);ss << pi << ".";// 現在將ss中的內容賦給一個string對象// 使用str()函數text = ss.str();cout << "\nHere is our formatted text string:\n" << text << endl;// 再加入一些信息ss << "\ There are 2 \"+\" in C++.";text = ss.str();cout<< "\nHere is the final string:\n" << text << endl;return 0; }功能二:實現類型轉換
string到 int / double 的轉換
#include <iostream> #include <string> #include <sstream> using namespace std;int main() {double rb; int ri; // 存儲結果string s; // 要轉化的字符串stringstream ss;s = "123.456789";ss << s; // 類似 coutss >> rb; // 類似 cincout.precision(10);cout << "string \""<< s << "\" to double object " << rb << endl;s = "654321";ss.clear(); //清空流ss << s;ss >> ri;cout << "string \""<< s << "\" to int object " << ri << endl;return 0; }功能三:實現任意類型轉換
#include <iostream> #include <string> #include <sstream> using namespace std; template <class t1="" class="" t2="">int main() {double sb = 123.456; int ri; // 存儲結果stringstream ss;ss << sb;ss >> ri;cout << ri;return 0; }該功能沒多少實際意義,不如static_cast 來的簡單。?
三、重要功能
寫這篇文章的目的主要是解決在筆試過程中,利用stringstream解決輸入的問題。
解決問題的關鍵是,以stringstream為輸入流,然后以getline識別分隔符然后進行處理。
常見輸入是一行,然后將其放入vector中。
1.數字由空格或逗號分開。
5 1 2 3 4 5 #include<bits/stdc++.h> //如果沒有這個頭文件 //看這里https://blog.csdn.net/qq_41687938/article/details/116535313 using namespace std;int main() {stringstream ss;vector<int> nums;string input;getline(cin, input);ss << input;int num;while (ss >> num) {nums.push_back(num);}for (auto a : nums) {cout << a << endl;}return 0; }因為stringstream默認輸出由空格分開?
2.數字由逗號分開
5,1,2,3,4,5?
#include<bits/stdc++.h> //如果沒有這個頭文件 //看這里https://blog.csdn.net/qq_41687938/article/details/116535313 using namespace std;int main() {stringstream ss;vector<int> nums;string input;getline(cin, input);ss << input;string num;while (getline(ss, num, ',')) {nums.push_back(stoi(num));}for (auto a : nums) {cout << a << endl;}return 0; }3.數字間不止一類符號分隔
5,[1,2,3,4,5]如果除了分隔符還有其他無關字符,就得提取出來后,自己加判斷了。?
#include<bits/stdc++.h> using namespace std;int main() {//std::string input;//{'5',',','[','1',',','2',',','3',',','4',',','5',']'};//5,[1,2,3,4,5]getline(cin, input);std::stringstream ss(input);string str;int a;vector<int> nums;while (getline(ss, str, ',')) {if (!str.empty() && str[0] == '[') {a = stoi(str.substr(1));}else if (!str.empty() && str[str.size() - 1] == ']')a = stoi(str.substr(0, str.length() - 1));elsea = stoi(str);nums.push_back(a);}for (int i = 0; i < nums.size(); i++)cout << nums[i] << ' ';return 0; }總結
以上是生活随笔為你收集整理的stringstream用法总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu下使用VSCode的laun
- 下一篇: OCR识别之图像预处理