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> 中. ...
随机推荐
- [学习笔记]设计模式之Command
为方便读者,本文已添加至索引: 设计模式 学习笔记索引 写在前面 在上篇Chain of Responsibility(职责链)模式笔记中,我们学习了一种行为型设计模式.今天,我们继续这一主题,来学习 ...
- oracle建立表空间
//创建临时表空间 create temporary tablespace test_temp tempfile 'E:\oracle\product\10.2.0\oradata\testserve ...
- 在js脚本里计算多个小数的加法问题
当在js脚本里计算多个小数的加法时,算得的结果往往会自动取整,这时候我们就应该加入以下代码: function toDecimal(x) { var val = Number(x); if (!isN ...
- 一次 php nusoap 调试过程
今天跟同事调用一个数据api ,用soap方式调用.本以为很简单的事情,却弄到了晚上. 因为有过调试经验,直接按照以往的过程直接部署,结果是错误. 1. 以为是调用方式错了,问了一下对接的同事,没问题 ...
- js 删除数组方法
今天遇到一个比较脑残的问题 ,在在用js删除数组的时候 delete 数组[下标]的方法删除数组时,该数组的下标变为null,但是数组的长度并没有发生相应的变化 转而使用splice(小标,第N个)删 ...
- linux系统下,递归删除.svn文件
linux系统下,递归删除.svn文件 SVNLinux 进入要删除的目录,执行下面的命令就可以啦. find . -name "*.svn" | xargs rm -rf
- myeclipse 添加服务器运行时环境
像servlet-api.jar.servlet-api.jar服务器能提供的包 解决方法如下: 1,File->New->Other->Server->Server(注意在n ...
- 反射 DataTable拓展方法 转实体对象、实体集合、JSON
Mapper类 using System; using System.Collections.Generic; using System.Data; using System.Globalizatio ...
- IntelIoT技术笔记Maven
1.Maven project facet配置 错误信息: One or more constraints have not been satisfied.以及Cannot change versio ...
- php对象与数组互转
//对象转数组 function objectToArray($obj){ $arr = is_object($obj) ? get_object_vars($obj) : $obj; if(is_a ...