一、介绍
<sstream> 定义了三个类:istringstream、ostringstream 和 stringstream,分别用来进行流的输入、输出和输入输出操作, stringstream 主要用来进行数据类型转换。由于 stringstream 使用 string 对象来代替字符数组(snprintf方式),可以避免缓冲区溢出的危险;而且,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符的问题。
在C++中,stringstream 是一个流类,它允许你将字符串当做流进行读写操作。它是 <sstream> 头文件中定义的一部分,包含了 istringstream(用于输入),ostringstream(用于输出)和 stringstream(既可以用于输入也可以用于输出)。
stringstream 主要被用于以下几种情况:
- 字符串和其他数据类型之间的转换。
- 从字符串中逐个提取数据。
- 向字符串中逐个插入数据。
- 作为一般的字符串处理工具。
二、stringstream分割字符串
2.1 如果是空格,可以直接分割
#include <string> #include <sstream> #include <iostream> using namespace std; int main() { string str = "i am a boy"; stringstream is(str); string s; while (is >> s) { // 输出流 cout << s << endl; } system("pause"); return 0; }
使用getline()函数输出流
#include <iostream> #include <sstream> #include <string> #include <fstream> using namespace std; int main() { // string str = "i am a boy"; string sss = "1 2 3 4 5 6"; //有空格的字符串,其输出也是一行有空格的数:1 2 3 4 5 6 // string sss = "123456"; //此种无空格的字符串,输出也是无空格:123456 // stringstream is(str); stringstream is(sss); // string s; // while (is >> s) { // 输出流 // cout << s << endl; // } while (getline(is,s,',')) { // 输出流 //即使去掉字符‘,’,其输出也是带空格分割的 cout << s << endl; } system("pause"); return 0; }
输出:
1 2 3 4 5 6
补充: