当前课程知识点:C++语言程序设计进阶 > 第十一章 流类库与输入/输出 > 输入流 > 从字符串输入
将字符串作为文本输入流的源,可以将字符串转换为其他数据类型
用于从字符串读取数据
在构造函数中设置要读取的字符串
功能
支持ifstream类的除open、close外的所有操作
典型应用
将字符串转换为数值
//11_12.cpp, 头部分省略 template <class T> inline T fromString(const string &str) { istringstream is(str); //创建字符串输入流 T v; is >> v; //从字符串输入流中读取变量v return v; //返回变量v } int main() { int v1 = fromString<int>("5"); cout << v1 << endl; double v2 = fromString<double>("1.2"); cout << v2 << endl; return 0; } 输出结果: 5 1.2
大家好
欢迎继续学习C++语言程序设计
接下来的这一节我们来学习
如何从字符串中输入
我们以字符串
作为输入数据的来源
使用字符串输入流
就可以将字符串里面的
这些字符类型的数据
转换成其他类型的数据
听起来是不是很奇妙呢
我们来看看
到底怎么样实现这种转换
要用字符串输入流
从字符串中读取数据
那么我们要在构造函数中
设置要读取的字符串
也就是说在构造函数中
要把字符串作为初始化值
放在里面
然后 由于这个字符串输入流
它支持istringstream类里面
除了open close以外的所有操作
所以我们就可以用通常的
流提取操作
以及其他的相关函数
从字符串流中读取信息
那么读出来以后
当然是作为
可能是作为其他类型的数值
来使用
这样就达到了将字符串
转换为别的类型
比如说数值类型
这样的目的
其实将字符串转换为数值
正是字符串输入流的
一个典型应用
接下来我们就看这个例子
在这个例子中
我们利用isstringsteam
将字符串转化为数值类型
这个程序呢
通过使用字符串输入流对象
可以将一个字符串转换成
数值型的数据
我们先看一下主函数里面
它执行的操作以及输出的结果
主函数中呢
我们使用fromString
这个函数模板
等会我们再看
这个函数模板的编写
使用这个函数模板
指定它的模板参数为int
这个时候呢
给它一个字符串作参数
它就将这个字符串
转换成一个int数据返回
然后我们将返回值
送到显示器上
显示验证一下
得到这个5
接下来再一次使用fromString
这个函数模板
指定模板参数是double类型
这时候给它一个字符串1.2
它就将这个字符串
转换成double类型的数据 返回
然后我们也是将返回数据
输出验证一下
现在我们来看这个fromString
函数模板
是怎么样实现这个转换的
它的参数就是一个字符串
就是需要转换的这个字符串
而返回值类型呢
是这个T类型
就是转换结果的类型
它是用类型参数来标记的
使用的时候呢
指定这回要转换的结果
是什么类型
比如我们第一次是int类型
第二次调用它
需要转换成是double类型
这样我们用类型参数的方式
指定
再看这个函数体中呢
首先要构造一个
isstringsteam对象
用参数字符串作为参数
去构造这个对象
也就是说这个时候
is这个对象里面
就包含了一个字符串
好 那么接下来定义一个
T类型的对象V
准备着用来接收转换的返回值
现在呢
就通过这个is对象和提取操作符
从这个输入的字符串流对象中
给它提取
也就是说
这个字符串输入流对象里面
实际上它含有了一个
待转换的字符串
我们用is去调用
提取运算符的话
就是从is这个对象里面去读取
读取的数据放到哪儿呢
放到T类型的变量v里面
这个过程实际上就是一个
格式转换的过程
就好像我们从文本文件
从键盘读一个字符串
读进来的时候呢
我们是把它读到一个
比如说int变量 double变量里面
这个效果是一样的
只不过呢
这回读取的来源
不是程序空间之外的某个文件
而是程序空间里面的一个字符串
然后最后呢
将我们转换结果这个字符串呢
作为返回值返回
这样的话呢
我们看到
就通过这个字符串流
就达到了将字符串
转换为数值型数据
当然我们也可以将字符串
转换成其他类型的数据
如果需要的话
-导学
--导学
-继承的基本概念和语法
-第七章 继承与派生--继承的基本概念和语法习题
-继承方式
-第七章 继承与派生--继承方式
-基类与派生类类型转换
-第七章 继承与派生--基类与派生类类型转换
-派生类的构造和析构
--派生类的构造函数
--派生类的析构函数
--第七章 继承与派生--派生类的构造和析构
-派生类成员的标识与访问
--虚基类
-第七章 继承与派生--派生类成员的标识与访问
-小结
--小结
-综合实例
--第七章综合实例
-实验七
--实验七
-导学
--导学
-第八章 多态性--导学
-运算符重载
--运算符重载的规则
-第八章 多态性--运算符重载
-虚函数
--虚函数
--虚析构函数
--虚表与动态绑定
-第八章 多态性--虚函数
-抽象类
--抽象类
--第八章 多态性--抽象类
-override与final
-第八章 多态性--override与final
-小结
--第八章小结
-综合实例
--第八章综合实例
-实验八
--实验八
- 第八章讲义
-导学
--导学
-模板
--函数模板
--类模板
-第九章 模板与群体数据--模板
-线性群体
--线性群体的概念
-第九章 模板与群体数据--线性群体
-数组
--数组类模板
-链表
--链表类模板
-第九章 模板与群体数据--链表
-栈
--栈类模板
--栈类模板课后习题
--例9-9 栈的应用课后习题
-队列
--队列类模板
-第九章 模板与群体数据--队列
-排序
--排序概述
--插入排序
--选择排序
--交换排序
-第九章 模板与群体数据--排序
-查找
--查找
--查找课后习题
-小结
--小结
-综合实例
--综合实例
-实验九
--实验九
- 第九章讲义
-导学
--导学
-泛型程序设计及STL的结构
--STL简介
-第十章 泛型程序设计与C++标准模板库--泛型程序设计及STL的结构
-迭代器
--迭代器
-第十章 泛型程序设计与C++标准模板库--迭代器
-容器的基本功能与分类
-第十章 泛型程序设计与C++标准模板库--容器的基本功能与分类
-顺序容器
--顺序容器的特征
--第十章 泛型程序设计与C++标准模板库--顺序容器
-关联容器
--集合
--映射
-第十章 泛型程序设计与C++标准模板库--关联容器
-函数对象
--函数对象
--函数适配器
-算法
--算法
-小结
--第十章小结
-综合实例
--综合实例
-实验十
--实验十
- 第十章讲义
-导学
--导学
-I/O流的概念及流类库结构
-第十一章 流类库与输入/输出--I/O流的概念及流类库结构
-输出流
--输出流概述
--向文本文件输出
--向二进制文件输出
--向字符串输出
-第十一章 流类库与输入/输出--输出流
-输入流
--输入流概述
--输入流应用举例
--从字符串输入
-第十一章 流类库与输入/输出--输入流
-输入/输出流
--输入/输出流
-第十一章 流类库与输入/输出--输入/输出流
-小结
--小结
-综合实例
--综合实例
-实验十一
--实验十一
- 第十一章讲义
-导学
--第12章导学
-异常处理的思想与程序实现
-第十二章 异常处理--异常处理的思想与程序实现
-异常处理中的构造与析构
-第十二章 异常处理--异常处理中的构造与析构
-标准程序库异常处理
-第十二章 异常处理--标准程序库异常处理
-小结
--第12章小结
-综合实例
--综合实例
-实验十二
--实验十二
- 第十二章讲义