赞
踩
#include <sstream>
<sstream> 定义了三个类:istringstream、ostringstream 和 stringstream,分别用来进行流的输入、输出和输入输出操作。本文以 stringstream 为主,介绍流的输入和输出操作。
<sstream> 主要用来进行数据类型转换,由于 <sstream> 使用 string 对象来代替字符数组(snprintf 方式),避免了缓冲区溢出的危险;而且,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符号的问题。简单说,相比 C 编程语言库的数据类型转换,<sstream> 更加安全、自动和直接。
使用stringstream将 int 类型转换为 string 类型:
- #include <sstream>
- #include <iostream>
-
- int main()
- {
- std::stringstream sstream;
- std::string strResult;
- int nValue = 1000;
-
- // 将int类型的值放入输入流中
- sstream << nValue;
- // 从sstream中抽取前面插入的int类型的值,赋给string类型
- sstream >> strResult;
-
- std::cout << "[cout]strResult is: " << strResult << std::endl; // [cout]strResult is: 1000
- printf("[printf]strResult is: %s\n", strResult.c_str()); // [printf]strResult is: 1000
-
- return 0;
- }
- #include <sstream>
- #include <iostream>
-
- int main()
- {
- std::string strComplex = "1+1i";
- std::stringstream sstream(strComplex); // 初始化时传入字符串
-
- int i, r;
- char c, w;
- // 从sstream中依次取值,赋给int和char类型
- sstream >> i >> c >> r >> w;
-
- std::cout << i << c << r << w << std::endl; // [cout] 1+1i
-
- return 0;
- }
在 stringstream 中存放多个字符串,实现多个字符串拼接的目的(其实完全可以使用 string 类实现):
- #include <sstream>
- #include <iostream>
-
- int main()
- {
- std::stringstream sstream;
-
- // 将多个字符串放入 sstream 中
- sstream << "first" << " " << "string,";
- sstream << " second string";
-
- // 使用 str() 方法,可以将 stringstream 类型转换为 string 类型;
- std::cout << "strResult is: " << sstream.str() << std::endl; // strResult is: first string, second string
-
- return 0;
- }
清空 stringstream 有两种方法:clear() 方法以及 str("") 方法。如果想清空 stringstream,使用 str("") 的方式;clear() 方法适用于进行多次数据类型转换的场景。
- #include <sstream>
- #include <iostream>
-
- int main()
- {
- std::stringstream sstream;
- int first, second;
-
- // 插入字符串
- sstream << "456";
- // 转换为int类型
- sstream >> first;
- std::cout << first << std::endl; // 456
-
- // 在进行多次类型转换前,必须先运行clear(),不能使用str(""),否则可能会有问题
- sstream.clear();
-
- // 插入bool值
- sstream << true;
- // 转换为int类型
- sstream >> second;
- std::cout << second << std::endl; // 1
-
- return 0;
- }
标准库中的string类没有实现像C#和Java中string类的split函数,所以想要分割字符串的时候需要我们自己手动实现。但是有了stringstream类就可以很容易的实现,stringstream默认遇到空格、tab、回车换行会停止字节流输出。
- #include <sstream>
- #include <iostream>
-
- int main()
- {
- std::stringstream ss("this apple is sweet");
- std::string word;
- while (ss >> word)
- {
- std::cout << word << std::endl; // 这里依次输出this、apple、is、sweet四个单词
- }
-
- return 0;
- }
也可以这样写:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。