C++ ostringstream、istringstream、stringstream 用法浅析

本文深入探讨C++中的sstream库,包括ostringstream用于输出,istringstream用于输入,以及stringstream支持双向操作。文章介绍了ios_base::ate和ios_base::app的区别,并通过示例代码展示ostringstream的使用,强调其在内存管理和格式化字符串方面的优势。
摘要由CSDN通过智能技术生成

C++ ostringstream、istringstream、stringstream 用法浅析

参考网址:https://blog.csdn.net/hellokandy/article/details/54585174

ios_base::ate和ios_base::app的区别

参考网址:https://blog.csdn.net/zhegfengtantan/article/details/8011785

ios_base::ate和ios_base::app都将文件指针指向打开文件的文件尾。区别:
ios_base::app模式只允许将数据添加到文件尾;
ios_base::ate模式将指针放到文件尾。

 

ostringstream : 用于执行C风格字符串的输出操作。

istringstream : 用于执行C风格字符串的输入操作。

stringstream : 同时支持C风格字符串的输入输出操作。

通常,ostringstream 类用来格式化字符串,避免申请大量的缓冲区,替代sprintf。该类能够根据内容自动分配内存,其对内存管理也是相当到位。

 

示例代码如下:

 

 
  1. #include <string>

  2. #include <sstream>//

  3. #include <iostream>

  4.  
  5. //ostringstream 用于执行C风格字符串的输出操作

  6. void ostringstream_test()

  7. {

  8. //ostringstream 只支持 << 操作符

  9. std::ostringstream oss;

  10. oss << "this is test" << 123456;

  11.  
  12. oss.str("");//清空之前的内容

  13. //oss.clear();//并不能清空内存

  14.  
  15. //浮点数转换限制

  16. double tmp = 123.1234567890123;

  17. oss.precision(12);

  18. oss.setf(std::ios::fixed);//将浮点数的位数限定为小数点之后的位数

  19. oss << tmp;

  20.  
  21. std::cout << oss.str() << "\r\n" << std::endl;

  22. }

  23.  
  24. //istringstream 用于执行C风格字符串的输入操作

  25. void istringstream_test()

  26. {

  27. //istringstream 只支持 >> 操作符

  28. std::string str = "welcome to china";

  29. std::istringstream iss(str);

  30.  
  31. //把字符串中以空格隔开的内容提取出来

  32. std::string out;

  33. while(iss >> out)

  34. {

  35. std::cout << out << std::endl;

  36. }

  37. std::cout << "\r\n" << std::endl;

  38. }

  39.  
  40. //stringstream 同时支持C风格字符串的输入输出操作

  41. void stringstream_test()

  42. {

  43. //输入

  44. std::stringstream ss;

  45. ss << "hello this is kandy " << 123;

  46. std::cout << ss.str() << "\r\n" << std::endl;

  47.  
  48. //输出

  49. std::string out;

  50. while(ss >> out)

  51. {

  52. std::cout << out.c_str() << std::endl;

  53. }

  54. std::cout << "\r\n" << std::endl;

  55. }

  56.  
  57. int main()

  58. {

  59. ostringstream_test();

  60.  
  61. istringstream_test();

  62.  
  63. stringstream_test();

  64.  
  65. system("pause");

  66.  
  67. return 0;

  68. }

 

 

输出结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值