C++引入ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含<sstream>这个头文件。

istringstream的构造函数原形如下:
istringstream::istringstream(string str);
它的作用是从string对象str中读取字符,stringstream对象可以绑定一行字符串,然后以空格为分隔符把该行分隔开来。

下面我们分离以空格为界限,分割一个字符串。

#include<iostream>
#include<sstream>
#include<string>
int main()
{
std::string str = "I am coding ...";
std::istringstream is(str);
do
{
std::string substr;
is>>substr;
std::cout << substr << std::endl;
} while (is);
return ;
}

程序输出

I

am

coding

...

另外用vector也可以实现

#include <vector>
#include<iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
string str("I am coding ...");
string buf;
stringstream ss(str);
vector<string> vec;
while (ss >> buf)
vec.push_back(buf);
for (vector<string>::iterator iter = vec.begin(); iter != vec.end(); ++iter)
{
cout << *iter << endl;
}
return ;
}

补充知识点,自己积累学习

在类型转换中使用模板

你可以轻松地定义函数模板来将一个任意的类型转换到特定的目标类型。例如,需要将各种数字值,如int、long、double等等转换成字符串,要使用以一个string类型和一个任意值t为参数的to_string()函数。to_string()函数将t转换为字符串并写入result中。使用str()成员函数来获取流内部缓冲的一份拷贝:

template<class T>

void to_string(string & result,const T& t)

{

   ostringstream oss;//创建一个流

   oss<<t;//把值传递如流中

   result=oss.str();//获取转换后的字符转并将其写入result
}

这样,你就可以轻松地将多种数值转换成字符串了:

to_string(s1,10.5);//double到string

to_string(s2,123);//int到string

to_string(s3,true);//bool到string

可以更进一步定义一个通用的转换模板,用于任意类型之间的转换。函数模板convert()含有两个模板参数out_type和in_value,功能是将in_value值转换成out_type类型:

template<class out_type,class in_value>

out_type convert(const in_value & t)

{

   stringstream stream;

   stream<<t;//向流中传值

   out_type result;//这里存储转换结果

   stream>>result;//向result中写入值

    return result;

}

这样使用convert():

double d;

string salary;

string s=”12.56”;

d=convert<double>(s);//d等于12.56

salary=convert<string>(9000.0);//salary等于”9000”

最新文章

  1. BlogEngine2.9模仿yahoo滚动新闻Widget
  2. IE9控件安装方法
  3. 对json排序
  4. python初识生成器 迭代器
  5. mac攻略(三) -- apache站点配置
  6. html中a标签href属性的一个坑
  7. 进入做Mvc项目的时候 返现某个文件夹下面css js png等静态文件都访问不了
  8. COJ975 WZJ的数据结构(负二十五)
  9. XML 解析 -- IE ,Chrome
  10. 使用 jQuery UI Widget Factory 编写有状态的插件(Stateful Plugins)
  11. [改善Java代码]建议采用的顺序是 List&lt;T&gt;、List&lt;?&gt;、List&lt;Object&gt;
  12. [SQL Server]一次执行资料夹内的.sql 指令码
  13. 2015移动安全挑战赛(阿里&amp;看雪主办)第一题分析
  14. Hadoop学习之shuffle过程
  15. IO之同步、异步、阻塞、非阻塞 (2)
  16. 关于Sql server数据 MD5加密
  17. 第二章 Java 基本语法1
  18. python3+selenium入门12-警告框处理
  19. 洛谷:P3281 [SCOI2013]数数 (优秀的解法)
  20. 【慕课网实战】Spark Streaming实时流处理项目实战笔记十四之铭文升级版

热门文章

  1. cocoaPods 去警告
  2. Android中对日期进行排序
  3. [Flex] PopUpButton系列 —— 弹出菜单的行高设置
  4. 用jQuery之后,之前javascript的一些方法就不能用了吗
  5. CRM plugin 激活 停用 事件
  6. (medium)LeetCode 241.Different Ways to Add Parentheses
  7. JDialog窗体
  8. 文件的输出与载入之java操作
  9. Perlin Noise 及其应用
  10. Android开发-API指南-任务和回退栈