stringstream用法整理

2025年4月9日 32点热度 0人点赞 0条评论

一部分转载自巴哈姆特: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 行,每行一个整数表示。

image.png
#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;
}

MuWinds

这个人很懒,什么都没留下

文章评论