一部分转载自巴哈姆特:https://home.gamer.com.tw/creationDetail.php?sn=4114818
stringstream是一個C++底下的類別,專門拿來讀取字串並且處理,很多時候拿來做字串的切割,或者是int跟string類別之間的轉換。
头文件(其实竞赛中多数是直接万能头文件的 xD)
C++
#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
}
看一道题:
输入的第一行有一个数字 NN 代表接下來有 NN 行数字,每一行有若干个的整数(最多 2020 个,每行最多 200200 个字符),请你输出每一行数字的和。
输入格式
第一行一个整数 NN。
接下来输入 N 行,每行若干个整数。
输出格式
输出 N 行,每行一个整数表示。

#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;
}
文章评论