当前课程知识点:C++语言程序设计进阶 >  第十一章 流类库与输入/输出 >  输出流 >  向字符串输出

返回《C++语言程序设计进阶》慕课在线视频课程列表

向字符串输出在线视频

向字符串输出

向字符串输出

将字符串作为输出流的目标,可以实现将其他数据类型转换为字符串的功能

字符串输出流( ostringstream )

例11-6用ostringstream将数值转换为字符串

//11_6.cpp
#include <iostream>
#include <sstream>
#include <string>
using namespace std;

//函数模板toString可以将各种支持“<<“插入符的类型的对象转换为字符串。

template <class T>
inline string toString(const T &v) {
    ostringstream os;   //创建字符串输出流
    os << v;        //将变量v的值写入字符串流
    return os.str();    //返回输出流生成的字符串
}

int main() {
    string str1 = toString(5);
    cout << str1 << endl;
    string str2 = toString(1.2);
    cout << str2 << endl;
    return 0;
}
输出结果:
5
1.2



下一节:输入流概述

返回《C++语言程序设计进阶》慕课在线视频列表

向字符串输出课程教案、知识点、字幕

大家好

欢迎继续学习C++语言程序设计

这一节我们来学习

如何向字符串中输出

大家是不是有个疑问

怎么叫做向字符串输出呢

字符串不也是在程序中

在内存中的一种数据格式吗

是的

我们说的向字符串输出

就是向我们程序内存中的

某个字符串输出

我们可以把内存中的一个字符串

当作输出流的目的地

那这有什么用呢

我们说输出的话

大多数时候

我们是希望把信息

持久化地存到外部存储设备去

那你干吗要放到

内存中的一个字符串中

这是一个很奇妙的功能

我们可以利用这种功能呢

将其他形式的

其他格式的数据

转换成字符串

回想一下

我们以文本方式

向显示器输出数据的时候

是不是把内存中的二进制数据

都转换成文本

转换成字符了呢

是的

现在我们把这个输出的目标对象

指到一个字符串

这个输出过程中

也是按文本输出的

那么就把一些其他类型的数据

它原本的二进制形式

在这个输出过程中

就转成字符了

存到字符串中了

其他格式的信息

就转换成字符串格式了

这是很有用的一个转换方式

现在我们来看

怎么样使用这个字符串输出流

字符串输出流呢

是ofstream类型的流对象

它用于构造一个

从其他类型转换过来的字符串

首先呢

它可以支持ofstream类里面

除了open close以外的所有操作

这个大家也可以理解

因为它不是一个真实的文件

当然它不存在打开文件

和关闭文件的问题

那么其他的操作呢

都可以支持

所以我们可以用其他的操作

比如说插入运算符

向这个字符串中写信息

这个字符串输出流对象呢

它有一个str函数

当你向这个字符串流对象中

插入数据 插入数据 插入数据

你要把输出的内容都输出完了

都装到这个字符串流对象中以后

那么可以用str这个函数

把里面那个字符串给它取出来

取出来的这个字符串

不就相当于将别的类型数据

转成字符串类型的这么一个

转换结果了吗

所以呢

将数值转换成字符串

是这个字符串输出流的

一种典型应用场景

接下来呢

我们就通过一个例题里看看

如何用ofstringstream

将数值转换成字符串

这道题目要求我们

将数值型的数据

能够转换成string类型的对象

我们先看一下主函数

和输出结果

了解一下这个题目

想让这个程序

达到一种什么样的效果

首先我们看到主函数中

两次调用toString

第一次给它的是一个整数作参数

它应该返回一个字符串5

然后输出验证一下

我们看到输出了5

第二次给它一个浮点数1.2

作参数

希望将1.和2合起来

也转换成一个字符串

然后我们接收到

这个返回字符串以后

输出验证一下

可以看到这个验证结果是1.2

现在我们就需要来写

这个toString函数了

看到我们两次调用

这个toString函数

用不同的参数传给它

它都能够正确处理

现在大家是不是想到

重载函数了

其实这道题用了

我们第九章讲的函数模板

用函数模板就可以避免将

这个执行流程完全一样的

算法完全一样的

两个函数体写成重载形式

避免了这样的重载

用函数模板

让编译器在需要的时候

为我们生成重载函数

这个函数模板 toString

它接收的参数呢

是一个T类型的引用

一个抽象的类型 类型参数

然后我们看在这个函数体中

定义了一个

ostringstream的对象os

这是一个字符串输出流

我们可以向这个字符

串输出流里面

插入我们想输出的数据

就像我们向

标准输出流中插入数据

是一样的

所以我们现在用

这个字符串输出流

将参数得到的这个v

这个v用指向的内容

插入到流向字符串的输出流中

那么这样一插入

这个内容到底流向哪儿了呢

在这个os对象里面

其实包含着一个字符串

我们的数据

就在这样的插入过程中

就被自动转换成了字符串

放到了os对象内部的那个容纳

字符串的地方去了

那么怎么将里面的字符串

再取出来呢

它有一个str函数

调用os的str函数

就可以将它内部的

已经转化好的字符串取出来

然后作为返回值返回

这样在主函数中呢

我们就接收到这个返回值

注意

虽然这里我们定义了

一个类型参数t

好象我们在使用tostring的时候

给它什么类型的数据

都应该语法上是可以的呀

其实也还有限制

我们看在这个函数体的内部

执行了插入运算

这就说明

这个引用v所指向的对象

必须是能够进行插入运算的

如果它是一个类的对象的话

我们必须为这个类

重载过对象的插入运算符

当然

对于所有基本数据类型来说

是没有问题的

我们直接去调用就可以了

因为基本数据类型

都可以使用插入运算符来输出

C++语言程序设计进阶课程列表:

第七章 继承与派生

-导学

--导学

-继承的基本概念和语法

--继承的基本概念和语法

-第七章 继承与派生--继承的基本概念和语法习题

-继承方式

--继承方式简介及公有继承

--私有继承和保护继承

-第七章 继承与派生--继承方式

-基类与派生类类型转换

--基类与派生类类型转换

-第七章 继承与派生--基类与派生类类型转换

-派生类的构造和析构

--派生类的构造函数

--派生类的构造函数举例

--派生类的复制构造函数

--派生类的析构函数

--第七章 继承与派生--派生类的构造和析构

-派生类成员的标识与访问

--访问从基类继承的成员

--虚基类

-第七章 继承与派生--派生类成员的标识与访问

-小结

--小结

-综合实例

--第七章综合实例

-实验七

--实验七

-第七章讲义

第八章 多态性

-导学

--导学

-第八章 多态性--导学

-运算符重载

--运算符重载的规则

--双目运算符重载为成员函数

--单目运算符重载为成员函数

--运算符重载为非成员函数

-第八章 多态性--运算符重载

-虚函数

--虚函数

--虚析构函数

--虚表与动态绑定

-第八章 多态性--虚函数

-抽象类

--抽象类

--第八章 多态性--抽象类

-override与final

--override与final

-第八章 多态性--override与final

-小结

--第八章小结

-综合实例

--第八章综合实例

-实验八

--实验八

- 第八章讲义

第九章 模板与群体数据

-导学

--导学

-模板

--函数模板

--类模板

-第九章 模板与群体数据--模板

-线性群体

--线性群体的概念

-第九章 模板与群体数据--线性群体

-数组

--数组类模板

--例9-4数组类应用举例

-链表

--链表的概念与结点类模板

--链表类模板

-第九章 模板与群体数据--链表

-栈

--栈类模板

--栈类模板课后习题

--例9-9 栈的应用

--例9-9 栈的应用课后习题

-队列

--队列类模板

-第九章 模板与群体数据--队列

-排序

--排序概述

--插入排序

--选择排序

--交换排序

-第九章 模板与群体数据--排序

-查找

--查找

--查找课后习题

-小结

--小结

-综合实例

--综合实例

-实验九

--实验九

- 第九章讲义

第十章 泛型程序设计与C++标准模板库

-导学

--导学

-泛型程序设计及STL的结构

--泛型程序设计的基本概念

--STL简介

-第十章 泛型程序设计与C++标准模板库--泛型程序设计及STL的结构

-迭代器

--迭代器

-第十章 泛型程序设计与C++标准模板库--迭代器

-容器的基本功能与分类

--容器的基本功能与分类

-第十章 泛型程序设计与C++标准模板库--容器的基本功能与分类

-顺序容器

--顺序容器的基本功能

--顺序容器的特征

--顺序容器的插入迭代器与适配器

--第十章 泛型程序设计与C++标准模板库--顺序容器

-关联容器

--关联容器分类和基本功能

--集合

--映射

--多重集合和多重映射

-第十章 泛型程序设计与C++标准模板库--关联容器

-函数对象

--函数对象

--函数适配器

-算法

--算法

-小结

--第十章小结

-综合实例

--综合实例

-实验十

--实验十

- 第十章讲义

第十一章 流类库与输入/输出

-导学

--导学

-I/O流的概念及流类库结构

--I/O流的概念及流类库结构

-第十一章 流类库与输入/输出--I/O流的概念及流类库结构

-输出流

--输出流概述

--向文本文件输出

--向二进制文件输出

--向字符串输出

-第十一章 流类库与输入/输出--输出流

-输入流

--输入流概述

--输入流应用举例

--从字符串输入

-第十一章 流类库与输入/输出--输入流

-输入/输出流

--输入/输出流

-第十一章 流类库与输入/输出--输入/输出流

-小结

--小结

-综合实例

--综合实例

-实验十一

--实验十一

- 第十一章讲义

第十二章 异常处理

-导学

--第12章导学

-异常处理的思想与程序实现

--异常处理的思想与程序实现

-第十二章 异常处理--异常处理的思想与程序实现

-异常处理中的构造与析构

--异常处理中的构造与析构

-第十二章 异常处理--异常处理中的构造与析构

-标准程序库异常处理

--标准程序库异常处理

-第十二章 异常处理--标准程序库异常处理

-小结

--第12章小结

-综合实例

--综合实例

-实验十二

--实验十二

- 第十二章讲义

向字符串输出笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。