当前位置:   article > 正文

C++-std:stringstream【数据类型转换、多个字符串拼接、分割字符串】_std::stringstream

std::stringstream

首先,需要包含头文件<sstream>:

#include <sstream>

<sstream> 定义了三个类:istringstream、ostringstream 和 stringstream,分别用来进行流的输入、输出和输入输出操作。本文以 stringstream 为主,介绍流的输入和输出操作。

<sstream> 主要用来进行数据类型转换,由于 <sstream> 使用 string 对象来代替字符数组(snprintf 方式),避免了缓冲区溢出的危险;而且,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符号的问题。简单说,相比 C 编程语言库的数据类型转换,<sstream> 更加安全、自动和直接。
 

一、数据类型转换

使用stringstream将 int 类型转换为 string 类型:

  1. #include <sstream>
  2. #include <iostream>
  3. int main()
  4. {
  5. std::stringstream sstream;
  6. std::string strResult;
  7. int nValue = 1000;
  8. // 将int类型的值放入输入流中
  9. sstream << nValue;
  10. // 从sstream中抽取前面插入的int类型的值,赋给string类型
  11. sstream >> strResult;
  12. std::cout << "[cout]strResult is: " << strResult << std::endl; // [cout]strResult is: 1000
  13. printf("[printf]strResult is: %s\n", strResult.c_str()); // [printf]strResult is: 1000
  14. return 0;
  15. }
  1. #include <sstream>
  2. #include <iostream>
  3. int main()
  4. {
  5. std::string strComplex = "1+1i";
  6. std::stringstream sstream(strComplex); // 初始化时传入字符串
  7. int i, r;
  8. char c, w;
  9. // 从sstream中依次取值,赋给int和char类型
  10. sstream >> i >> c >> r >> w;
  11. std::cout << i << c << r << w << std::endl; // [cout] 1+1i
  12. return 0;
  13. }

二、多个字符串拼接

在 stringstream 中存放多个字符串,实现多个字符串拼接的目的(其实完全可以使用 string 类实现):

  1. #include <sstream>
  2. #include <iostream>
  3. int main()
  4. {
  5. std::stringstream sstream;
  6. // 将多个字符串放入 sstream 中
  7. sstream << "first" << " " << "string,";
  8. sstream << " second string";
  9. // 使用 str() 方法,可以将 stringstream 类型转换为 string 类型;
  10. std::cout << "strResult is: " << sstream.str() << std::endl; // strResult is: first string, second string
  11. return 0;
  12. }

清空stringstream

清空 stringstream 有两种方法:clear() 方法以及 str("") 方法。如果想清空 stringstream,使用 str("") 的方式;clear() 方法适用于进行多次数据类型转换的场景。

  1. #include <sstream>
  2. #include <iostream>
  3. int main()
  4. {
  5. std::stringstream sstream;
  6. int first, second;
  7. // 插入字符串
  8. sstream << "456";
  9. // 转换为int类型
  10. sstream >> first;
  11. std::cout << first << std::endl; // 456
  12. // 在进行多次类型转换前,必须先运行clear(),不能使用str(""),否则可能会有问题
  13. sstream.clear();
  14. // 插入bool值
  15. sstream << true;
  16. // 转换为int类型
  17. sstream >> second;
  18. std::cout << second << std::endl; // 1
  19. return 0;
  20. }

三、分割字符串

标准库中的string类没有实现像C#和Java中string类的split函数,所以想要分割字符串的时候需要我们自己手动实现。但是有了stringstream类就可以很容易的实现,stringstream默认遇到空格、tab、回车换行会停止字节流输出。

  1. #include <sstream>
  2. #include <iostream>
  3. int main()
  4. {
  5. std::stringstream ss("this apple is sweet");
  6. std::string word;
  7. while (ss >> word)
  8. {
  9. std::cout << word << std::endl; // 这里依次输出this、apple、is、sweet四个单词
  10. }
  11. return 0;
  12. }

也可以这样写:

C++ stringstream_Sakuya__的博客-CSDN博客_c++ stringstream

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/735984
推荐阅读
相关标签
  

闽ICP备14008679号