赞
踩
目录
本文主要介绍如何使用stringstream处理在算法练习或竞赛中遇到的输入输出问题。
stringstream 是 C++ 提供的专门用于处理字符串的输入输出流类。
这里稍微提一下c++中“流”的概念。在C++中,将数据从一个对象到另一个对象的流动抽象为“流”。流在使用前要被创建,使用后要被删除。数据的输入与输出是通过 I/O 流实现的,cin 和 cout 是c++预定义的流类对象。
<sstream> 主要用来进行数据类型转换,由于 <sstream> 使用 string 对象来代替字符数组(snprintf 方式),避免了缓冲区溢出的危险;而且,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符号的问题。简单说,相比 C 编程语言库的数据类型转换,<sstream> 更加安全、自动和直接。
#include <sstream>
这里展示一份示例代码,介绍将 string 类型转换为 int 类型的过程。
- string result = "10000";
- int n = 0;
- stream << result;
- stream >> n; //n等于10000
使用场景:在进行多次转换的时候,必须调用stringstream的成员函数.clear()
- #include <iostream>
- #include <string>
- #include <sstream>
- using namespace std;
-
- int main()
- {
- stringstream ss;
- int first = 0, second = 0;
-
- ss << "456"; // 插入字符串
- ss >> first; //转换成int
- cout << first << endl;
-
- ss.clear(); //在进行多次转换前, 必须清除ss
- ss << true;
- ss >> second;
- cout << second << endl;
-
- return 0;
- }

运行结果:
运行.clear()结果:
没有运行.clear()结果:
示例代码的内容如下:
- #include <string>
- #include <sstream>
- #include <iostream>
-
- using namespace std;
-
- int main()
- {
- stringstream sstream;
-
- // 将多个字符串放入 sstream 中
- sstream << "first" << " " << "string,";
- sstream << " second string";
- cout << "strResult is: " << sstream.str() << endl;
-
- // 清空 sstream
- sstream.str("");
- sstream << "third string";
- cout << "After clear, strResult is: " << sstream.str() << endl;
-
- return 0;
- }

运行结果:
运行.str() 结果:
没有运行.str() 结果:
从上述代码执行结果能够知道:
題目:输入的第一行有一个数字 N 代表接下來有 N 行资料,每一行资料里有不固定个数的整数(最多20个,每行最大200个字元),编程將每行的总和打印出來。
输入:
3
1 2 3
20 17 23 54 77 60
111 222 333 444 555 666 777 888 999
输出:
6
251
4995
代码:
- #include <iostream>
- #include <string>
- #include <sstream>
-
- using namespace std;
-
- int main()
- {
- string s;
- stringstream ss;
- int n;
- cin >> n;
- getline(cin, s); //读取换行
-
- for (int i = 0; i < n; i++)
-
- {
- getline(cin, s);
- ss.clear();
- ss.str(s);
-
- int sum = 0;
- while (1)
- {
- int a;
- ss >> a;
-
- /**错误处理函数fail及其功能
- *如果出现一个不可恢复的错误或一个预期的条件,
- *例如一个转换错误或文件未找到,则返回一个非0值。
- *在用零参量调用clear后,错误标记被清除。
- */
-
- if(ss.fail())
- break;
-
- sum += a;
- }
-
- cout << sum << endl;
- }
- return 0;

(110条消息) string和stringstream用法_李典金的博客-CSDN博客_string stringstream
(110条消息) C++中头文件iostream介绍_fengbingchun的博客-CSDN博客_<iostream>
(110条消息) C++编程语言中stringstream类介绍_liitdar的博客-CSDN博客_stringstream
郑莉《C++语言程序设计》(第4版)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。