c++ 控制台流和字符串流
前言
上一章节简单介绍c++中关于流的概念,这两章节将重点讲解如何使用,本章讲解控制台流和字符串流。
控制台输出流
输出流定义在头文件中,使用输出流最简单的方法就是 使用<<运算符。通过你<<可以输出c++基本类型。包括int、指针、double、字符。
int ncount = ;
cout<<ncount<<endl;
char *ch = "teststream";
cout<<ch<<endl;//输出"teststream"
cout<<*ch<<endl;//输出"t‘。
- 输出流方法
1、put、write是原始的输出方法,前者输出字符,后者输出字符数组或者字符串。
2、 Flush
向输出流写入数据时候,不一定立即将数据写入目标。大部分输出流都会进行缓冲,当满足以下条件时候,将进行刷新操作。
a. 到达某个标记(endl)
b. 流离开作用域
c. 要求从对应的输入流输入数据的时候
d. 流缓冲满 的时候。
e.显示要求流刷新时。
endl输出后,然后就是换行,flush则不换行。 - 输出流操作算子
流有一项独特的特性。c++流能识别操作流算子,操作流算子能够修改流行为的对象,而不是数据。
控制台输入流
通过输入流可以简单读取数据。接收的类型输出所识别的类型一致。默认情况下,>>运算符根据空白符对输入值标志化,遇见空格符,后面的无法输入。如果用户输入hello there,输入的为hello。
char str[];
int partsize;
cout<<"Name and Number of Guests"<<endl;
cin>>str>>partsize;
cout<<"Thank You"<<"."<<str<<endl;
cout<<partsize<<endl;
system("pause");
通过输入流可以读入多个值,而且可以根据需要混合和匹配类型。
- 输入方法
Get()方法允许从流中读入原始输入数据。只能读取char类型的。
getline:从流中获取一行数据,用一行数据填充字符缓冲区,数据量最大到制定大小。指定大小包括\0字符。
字符串流stringstream
在程序中遇到格式转化怎么办?
比如从int转化为char类型,我们常用sprintf,使用此函数要保证1、必须确保证目标缓冲区有足够大空间以容纳转换完的字符串2、必须使用正确的格式化符
int n= ;
char strs[];
sprintf_s(strs,"输入数值为:%d",n);
//如果为下面就出错了
sprintf_s(strs,"输入数值为:%f",n);
cout<<strs<<endl;
定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。另 外,每个类都有一个对应的宽字符集版本。简单起见,我主要以stringstream为中心,因为每个转换都要涉及到输入和输出操作。
strstream sstream;
char* result = "";
int n = ;
sstream<<result;
sstream>>n;//n 为1000
cout<<n;
system("pause");
#include<time.h>
#include <sstream>//此处加载sstream头文件
using namespace std;
int main()
{
stringstream sstream;
string result = "";//用string,在stream可以读取
int n = ;
sstream<<result;
sstream>>n;
cout<<n;
system("pause");
}
大量的字符串串联在一起,使用字符串流相率比反复调用string效率高.
如果你打算在多次转换中使用同一个stringstream对象,记住再每次转换前要使用clear()方法;
你可以轻松地定义函数模板来将一个任意的类型转换到特定的目标类型。例如,需要将各种数字值,如int、long、double等等转换成字符串,要使用以一个string类型和一个任意值t为参数的to_string()函数。to_string()函数将t转换为字符串并写入result中。使用str()成员函数来获取流内部缓冲的一份拷贝
void to_string1(string & result,const T& t) {
ostringstream oss;//创建一个流,最好是全局变量,然后每次clear oss<<t;//把值传递如流中 result=oss.str();//获取转换后的字符转并将其写入result
} int main()
{
stringstream sstream;
string result ;
to_string1(result,true);
to_string1(s2,);//int到string
cout<<result;
getchar();
}
#include <sstream>
#include <iostream>
int main()
{
std::stringstream stream;
int first, second;
stream<< ""; //插入字符串
stream >> first; //转换成int
std::cout << first << std::endl;
stream.clear(); //在进行多次转换前,必须清除stream
stream << true; //插入bool值
stream >> second; //提取出int
std::cout << second << std::endl;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
c++ 控制台流和字符串流的更多相关文章
- Java文件与io——字节数组流数据流字符串流
字节数组流 ByteArrayInputStream:包含一个内部缓冲区,该缓冲区包含从流中读取的字节.内部计数器跟踪read方法要提供的下一个字节.关闭ByteArrayInputStream无效. ...
- C++学习50 对字符串流的读写
文件流是以外存文件为输入输出对象的数据流,字符串流不是以外存文件为输入输出的对象,而以内存中用户定义的字符数组(字符串)为输入输出的对象,即将数据输出到内存中的字符数组,或者从字符数组(字符串)将数据 ...
- 字符串流sstream[part1/基本知识]
C++中的输入输出分为三种:基于控制台的I/O,即istream.ostream.iostream:基于文件的I/O,即ifstream.ofstream.fstream:基于字符串的I/O,即ist ...
- 字符串流stringstream(头文件sstream)
今天看到一样很有趣的东西,可以用于各种类型的转换.其实一个文本可以看作一个长长的字符串,整数啊浮点数的都是字符串,于是在字符串流里面就可以很方便地玩转各种类型,比如说: #include<ios ...
- 字符串流sstream[part2/使用同一个字符串流反复读写数据]
stringstream构造函数会特别消耗内存,似乎不打算主动释放内存(或许是为了提高效率),如果你要在程序中使用同一个流反复读写大量数据,将会造成大量的内部消耗,因此建议: 1:调用clear ...
- Java中的字符串流的读取和写入(创建文件并判断重复账户)
各位我又来了!!哎!好心酸!我还没注册到三天!!没法登上博客的首页!!心累!! import java.io.BufferedOutputStream; import java.io.Buffered ...
- 流类库继承体系(IO流,文件流,串流)和 字符串流的基本操作
一.IO.流 数据的输入和输出(input/output简写为I/O) 对标准输入设备和标准输出设备的输入输出简称为标准I/O 对在外存磁盘上文件的输入输出简称为文件I/O 对内存中指定的字符串存储空 ...
- stringstream类操作字符串流
C++ Code 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...
- C++ 学习笔记之——字符串和字符串流
1. 字符数组 字符数组,也就是存放字符类型数据的数组,只不过字符数组的结尾必须是 '\0'.C++ 已经提供了一些字符串处理函数,这些函数被封装在头文件 和 <string.h> 中. ...
随机推荐
- uniq和sort的用法
uniq和sort都是按行操作的linux命令. sort按文本行排序,如下所示的log文件:直接sort log即可将其排序. 容易忽略的是sort -n命令,在如下例子中将看到 如果直接sort则 ...
- SGU 269. Rooks(DP)
题意: 给n(<=250)条水平网格,然后在上面放k棋子,每行每列都只能放一个.求方法总数. Solution: 简单的DP, 只要对给出的水平长度排个序就很容易处理了. 需要用到高精度. 偷懒 ...
- jQuery插件综合应用(二)文字为主的页面
一.介绍 文字内容是每个网站都有的内容,网站在展示文字内容时,总是比图片.视频等富媒体内容要难一些,因为富媒体容易被用户接受.尤其是越多的文字内容越难以被用户通篇的阅读,跳跃式阅读往往是阅读的主要方式 ...
- Laravel框架——Session操作
use Session;//session的永久保存(在不过期范围内) Session::put('key', 'value'); //等同于PHP的原生session $_SESSION['key' ...
- NSURLSession -- 实际开发中运用
NSURLSession实际请求 iOS9使用http请求方法: 在工程info.plist文件内添加NSAppTransportSecurity键,类型为dictionary 在NSAppTrans ...
- Unity3D 解决c#脚本乱码
怀着无比激动的心情下载了Unity3D,按照网上的教程试着制作我的第一个U3D"作品":camera绑定绘制GUI显示"Hello, World",很简单的例子 ...
- bzoj 3110: [Zjoi2013]K大数查询 树状数组套线段树
3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1384 Solved: 629[Submit][Stat ...
- ViewController 的loadView、viewDidLoad、viewDidUnload分别是什么时候调用的,在自定义ViewCointroller时在这几个函数中应该做什么工作?
由init.loadView.viewDidLoad.viewDidUnload.dealloc的关系说起 init方法 在init方法中实例化必要的对象(遵从LazyLoad思想) init方法中初 ...
- 自己总结的一些android公共库
本文主要介绍自己在android开发中总结的一些公共库,目前包括下拉刷新ListView.可以响应各个方向CompoundDrawables点击操作的TextView.图片缓存,不断更新,欢迎交流 ? ...
- Node.js V0.12新特性之性能优化
v0.12悠长的开发周期(已经过去九个月了,并且还在继续,是有史以来最长的一次)让核心团队和贡献者们有充分的机会对性能做一些优化.本文会介绍其中最值得注意的几个. 支持塞住模式的可写流 现在可写流可以 ...