stringstream用法整理
一部分转载自巴哈姆特:https://home.gamer.com.tw/creationDetail.php?sn=4114818
stringstream是一個C++底下的類別,專門拿來讀取字串並且處理,很多時候拿來做字串的切割,或者是int跟string類別之間的轉換。
头文件(其实竞赛中多数是直接万能头文件的 xD)
#include<sstream>
●把int型態的數字轉成string
此時的stringstream就像個橋樑,可以負責當中間轉換的部分。
stringstream提供了>>與<<運算子來讀取或寫入:
>>代表寫入stringstream中,<<代表從stringstream拿出。
#include <sstream> using namespace std; int main() { stringstream s1; int number =1234; string output;//要把number轉成字串型態的容器 cout<<"number="<<number<<endl;//顯示number=1234; s1<<number; //將以int宣告的number放入我們的stringstream中 s1>>output; cout<<"output="<<output<<endl;//顯示output=1234; }
值得注意的是我們兩行顯示都是1234但是他的資料型態卻已經不一樣了,第一個是int的型態,第二行則是string的型態。
●相反的stringstream也可以將string轉成int
#include <sstream> using namespace std; int main() { stringstream string_to_int; string s1="12345"; int n1; string_to_int<<s1; //也可以使用string_to_int.str(s1); //或者 s1=string_to_int.str(); string_to_int>>n1; cout<<"s1="<<s1<<endl;//s1=12345 cout<<"n1="<<n1<<endl;//n1=12345 }
看一道题:
输入的第一行有一个数字 代表接下來有 行数字,每一行有若干个的整数(最多 个,每行最多 个字符),请你输出每一行数字的和。
输入格式
第一行一个整数 。
接下来输入 行,每行若干个整数。
输出格式
输出 行,每行一个整数表示。
#include<bits/stdc++.h> #define ll long long #define ull unsigned long long using namespace std; int main() { ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); int N; cin>>N; stringstream ss; string s; getline(cin,s); for(int i=0;i<N;i++) { int a,sum=0; getline(cin,s); ss.clear(); ss.str(s); while(1) { ss >> a; if(ss.fail())break; sum += a; } cout<<sum<<'\n'; } return 0; }