#include<sstream>
这里就会谈一下关于这个头文件比较实用的部分,首先说这个头文件里的一个类 stringstream类。stringstream是字符串流。
1、使用stringstream转换类型
#include<iostream>
#include<sstream>
using namespace std;
typedef long long ll;
int main()
{
ll num = 0;
string str = "123456789123456789";
stringstream ss; //定义一个stringstream的对象
ss << str; //可以理解为把str这个字符串变成流
ss >> num; //流的话输出的时候会根据 >> 后面的变量类型进行输出
//类似于 sin >> x 输入的数据会根据x的类型进行输出,不像scanf("%d", &x);
//一样,还需要自己告诉计算机类型,这也是为什么 cin 要比 scanf 慢的原因
/**这时候num就保存了 long long 类型的123456789123456789***/
cout<<num<<'\n';
}
2、使用stringstream类型进行数据切分
如果给你一个字符串 : 12x45x26x89 让你把x看作空格,计算用x分开的正整数的总和。
#include<iostream>
#include<sstream>
using namespace std;
typedef long long ll;
int x, sum = 0;
int main()
{
string str;
while(cin>>str)
{
for(int i = 0; i < str.length(); i++){
if(str[i] == 'x') str[i] = ' ';
}
stringstream ss(str); //定义一个stringstream类型的对象并用str进行初始化
while(ss >> x) //可以理解为cin >> , cin也是以空格或者回车作为结束的标准
//实际上cin应该也是类似于这种输入,都是通过流来输入的。(可以先这样理解着)
{
sum += x;
}
cout<<sum<<'\n';
}
}
简单举个例子,有次比赛,它给你的数据是这样给的:(让你求这些数的和,每一行的数字个数是不确定的)
sample in:
3
12 63 3 56
12 55
66 2 99
sample out:
368
#include<iostream>
#include<sstream>
#include<cstdio>
#include<string>
using namespace std;
typedef long long ll;
int T, sum, x;
int main()
{
string line;
cin>>T;
getchar(); //吃掉一个回车,防止getline()输入
while(T--){
getline(cin, line);
stringstream ss(line);
while(ss >> x){
sum += x;
}
}
cout<<sum<<'\n';
return 0;
}