stringstream用法总结
目錄
一、概念
二、基本功能
功能一:預(yù)定的格式將程序中的數(shù)據(jù)保存在一個(gè)string 中
功能二:實(shí)現(xiàn)類型轉(zhuǎn)換
?????????功能三:實(shí)現(xiàn)任意類型轉(zhuǎn)換
三、重要功能
1.數(shù)字由空格或逗號分開。
2.數(shù)字由逗號分開
3.數(shù)字間不止一類符號分隔
一、概念
C++引入了ostringstream、istringstream、stringstream這三個(gè)類,要使用他們創(chuàng)建對象就必須包含sstream.h頭文件。
istringstream類用于執(zhí)行C++風(fēng)格的串流的輸入操作。?
ostringstream類用于執(zhí)行C風(fēng)格的串流的輸出操作。?
strstream類同時(shí)可以支持C風(fēng)格的串流的輸入輸出操作。
istringstream類是從istream和stringstreambase派生而來,ostringstream是從ostream和 stringstreambase派生而來, stringstream則是從iostream類和stringstreambase派生而來。
他們的繼承關(guān)系如下圖所示:
istringstream是由一個(gè)string對象構(gòu)造而來,istringstream類從一個(gè)string對象讀取字符。?
istringstream的構(gòu)造函數(shù)原形如下:?
C++ stringstream 類是一種十分有用的類,特別是當(dāng)我們需要在程序中使用字符串和數(shù)字?jǐn)?shù)據(jù)的時(shí)候。要想在程序中使用 stringstream 類,我們需要在源程序文件中包含頭文件include<sstream>。stringstream 對象的使用方法與cout對象的使用方法基本相同。stringstream 類提供的函數(shù),將數(shù)字化轉(zhuǎn)化為字符串。
當(dāng)我們需要按預(yù)定的格式將程序中的數(shù)據(jù)保存在一個(gè)string 中的時(shí)候,可以先創(chuàng)建一個(gè)stringstream 對象,并通過運(yùn)算符 ”<<“ 將數(shù)據(jù)傳遞給 stringstream 對象。(這與通過”<<“ 使用cout 對象的方法相同。)接著,我們可以通過調(diào)用stringstream 類的函數(shù)str() 將對象所包含的內(nèi)容賦給一個(gè)string對象。在一下的程序中,我們先將數(shù)據(jù)傳遞給一個(gè)stringstream 對象,然后通過該 stringstream 對象將數(shù)值賦給一個(gè)string 對象。住:cout能使用的所有ios格式標(biāo)記也可以在stringstream 對象中使用。
二、基本功能
功能一:預(yù)定的格式將程序中的數(shù)據(jù)保存在一個(gè)string 中
// 如何使用 stringstream // 對象生成格式化的 string#include <iostream> #include <string> #include <sstream> using namespace std;int main() {cout << "\n Welcome to the StringStream Demo program.\n";// 構(gòu)建一些將在string中出現(xiàn)的數(shù)據(jù)變量// PI 精確到小數(shù)點(diǎn)后15位double pi = 3.141592653589793;float dollar = 1.00;int dozen = 12;string text;// 我們希望tring 的格式如下:// dozen適12,dollar是$1.00// 精確到小數(shù)點(diǎn)后10為pi是3.141592653589793// 生成stringstream 對象stringstream ss;// 現(xiàn)在像使用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 << ".";// 現(xiàn)在將ss中的內(nèi)容賦給一個(gè)string對象// 使用str()函數(shù)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; }功能二:實(shí)現(xiàn)類型轉(zhuǎn)換
string到 int / double 的轉(zhuǎn)換
#include <iostream> #include <string> #include <sstream> using namespace std;int main() {double rb; int ri; // 存儲結(jié)果string s; // 要轉(zhuǎn)化的字符串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; }功能三:實(shí)現(xiàn)任意類型轉(zhuǎn)換
#include <iostream> #include <string> #include <sstream> using namespace std; template <class t1="" class="" t2="">int main() {double sb = 123.456; int ri; // 存儲結(jié)果stringstream ss;ss << sb;ss >> ri;cout << ri;return 0; }該功能沒多少實(shí)際意義,不如static_cast 來的簡單。?
三、重要功能
寫這篇文章的目的主要是解決在筆試過程中,利用stringstream解決輸入的問題。
解決問題的關(guān)鍵是,以stringstream為輸入流,然后以getline識別分隔符然后進(jìn)行處理。
常見輸入是一行,然后將其放入vector中。
1.數(shù)字由空格或逗號分開。
5 1 2 3 4 5 #include<bits/stdc++.h> //如果沒有這個(gè)頭文件 //看這里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; }因?yàn)閟tringstream默認(rèn)輸出由空格分開?
2.數(shù)字由逗號分開
5,1,2,3,4,5?
#include<bits/stdc++.h> //如果沒有這個(gè)頭文件 //看這里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.數(shù)字間不止一類符號分隔
5,[1,2,3,4,5]如果除了分隔符還有其他無關(guān)字符,就得提取出來后,自己加判斷了。?
#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; }總結(jié)
以上是生活随笔為你收集整理的stringstream用法总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu下使用VSCode的laun
- 下一篇: OCR识别之图像预处理