题解分享
题解分享简介
stringstream练习 - 题解
```
#include
using namespace std;
int main(){
int n;
cin>>n;
string s;
getline(cin,s);
for(int i=0; i<n; i++){
getline(cin,s);
stringstream ss;
ss.str(s);
int a,sum=0;
while(ss >> a){
sum+=a;
}
cout<<sum<<endl;
}
return 0;
}
```
查看全文
0
0
1
4
stringstream练习 - 题解
```
/*
思路分析
思路一 (error) :
1.用一个变量循环接收并累加数字,遇到\0时输出并重置
---num 是int类型 不能用 if ( num == '\n' ) 来判断
学习思路二 :
1.在思路一基础上进行改进,
2.将引入cin.fail() cin.clear() cin.ignore();
--- 还是有小问题,输出的结果不对
--- 不过用新的窥视函数cin.peek()函数 完美解决
--- 遗憾的是测试结果没问题,但测评一个都过不了
学习思路三:
1. 关键用法 stringstream 用来分割字符串 空格为间隔
2. getline() 获取每一行 cin.ignore() 去掉每一行的换行符
3. ss >> num ==> 从分割出来的ss字符流中提取数字
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
cin.ignore();
int num;
for ( int i = 1; i <= n; i++ ) {
int sum = 0;
for ( int j = 1; j <= 20; j++ ) {
//cin.peek() 窥视函数666
if ( cin.peek() == '\n' || cin.peek() == EOF) {
cin.ignore(); //去除\n换行符
break;
}
if ( cin >> num ) { //如果成功输入一个数字
sum += num;
} else { // 代表输入错误
//清除错误
cin.clear();
//清除当前行剩余内容
cin.ignore();
break;
}
}
cout << sum << endl;
}
return 0;
}
*/
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
int num;
cin >> n;
cin.ignore();
for ( int i = 0; i < n; i++ ) {
int sum = 0;
string str;
getline(cin , str);
//string ss = stringstream(str);
//stringstream 是一个类,而不是一个字符串类型。
stringstream ss(str);
while ( ss >> num ) {
sum += num;
}
cout << sum << endl;
}
return 0;
}
```
查看全文
0
0
0
3



