前言

上一章节简单介绍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++ 控制台流和字符串流的更多相关文章

  1. Java文件与io——字节数组流数据流字符串流

    字节数组流 ByteArrayInputStream:包含一个内部缓冲区,该缓冲区包含从流中读取的字节.内部计数器跟踪read方法要提供的下一个字节.关闭ByteArrayInputStream无效. ...

  2. C++学习50 对字符串流的读写

    文件流是以外存文件为输入输出对象的数据流,字符串流不是以外存文件为输入输出的对象,而以内存中用户定义的字符数组(字符串)为输入输出的对象,即将数据输出到内存中的字符数组,或者从字符数组(字符串)将数据 ...

  3. 字符串流sstream[part1/基本知识]

    C++中的输入输出分为三种:基于控制台的I/O,即istream.ostream.iostream:基于文件的I/O,即ifstream.ofstream.fstream:基于字符串的I/O,即ist ...

  4. 字符串流stringstream(头文件sstream)

    今天看到一样很有趣的东西,可以用于各种类型的转换.其实一个文本可以看作一个长长的字符串,整数啊浮点数的都是字符串,于是在字符串流里面就可以很方便地玩转各种类型,比如说: #include<ios ...

  5. 字符串流sstream[part2/使用同一个字符串流反复读写数据]

    stringstream构造函数会特别消耗内存,似乎不打算主动释放内存(或许是为了提高效率),如果你要在程序中使用同一个流反复读写大量数据,将会造成大量的内部消耗,因此建议:    1:调用clear ...

  6. Java中的字符串流的读取和写入(创建文件并判断重复账户)

    各位我又来了!!哎!好心酸!我还没注册到三天!!没法登上博客的首页!!心累!! import java.io.BufferedOutputStream; import java.io.Buffered ...

  7. 流类库继承体系(IO流,文件流,串流)和 字符串流的基本操作

    一.IO.流 数据的输入和输出(input/output简写为I/O) 对标准输入设备和标准输出设备的输入输出简称为标准I/O 对在外存磁盘上文件的输入输出简称为文件I/O 对内存中指定的字符串存储空 ...

  8. stringstream类操作字符串流

     C++ Code  12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...

  9. C++ 学习笔记之——字符串和字符串流

    1. 字符数组 字符数组,也就是存放字符类型数据的数组,只不过字符数组的结尾必须是 '\0'.C++ 已经提供了一些字符串处理函数,这些函数被封装在头文件 和 <string.h> 中. ...

随机推荐

  1. Eclipse debug调试

    Eclipse debug调试: F5:跳入方法F6:向下逐行调试F7:跳出方法F8:直接跳转到下一个断点

  2. oracle删除用户所有表

    在删除数据表的时候往往遇到外键约束无法删除的情况,我们可以通过以下几步将数据库表删除,建议在删除库之前先对数据库进行备份,养成良好习惯. 1.删除外键 --查询用户所有表的外键,owner条件为use ...

  3. Node.js(window)基础(1)——用cmd命令行访问某一文件夹下的js文件

    一.安装,从官网上下载安装,安装基本一直点击下一步就行.注意:node.js基于Python的,安装node.js之前电脑上要安装Python,最好是Python2.7或2.6. 二.cmd进入命令行 ...

  4. 2016022607 - redis配置文件

    在Redis有配置文件(redis.conf)可在Redis的根目录下找到.可以通过Redis的CONFIG命令设置所有Redis的配置. Redis的CONFIG命令的基本语法如下所示: redis ...

  5. [转]hive中order by,distribute by,sort by,cluster by

    转至http://my.oschina.net/repine/blog/296562 order by,distribute by,sort by,cluster by  查询使用说明 1 2 3 4 ...

  6. C连接MySQL数据库开发之Windows环境配置及测试

    一.开发环境 Win8.1 64位.VS2013.MySQL5.5.3764位 MySQL安装目录为:C:\Program Files\MySQL\MySQL Server 5.5 二.配置工程环境 ...

  7. jquery事件之event.target用法详解

    1. 定义和用法: 显示哪个 DOM 元素触发了事件: $("p, button, h1, h2").click(function(event){ $("div" ...

  8. bzoj 1501: [NOI2005]智慧珠游戏 Dancing Link

    1501: [NOI2005]智慧珠游戏 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 190  Solved: 122[Submit][Status] ...

  9. [BZOJ 1901] Dynamic Rankings 【树状数组套线段树 || 线段树套线段树】

    题目链接:BZOJ - 1901 题目分析 树状数组套线段树或线段树套线段树都可以解决这道题. 第一层是区间,第二层是权值. 空间复杂度和时间复杂度均为 O(n log^2 n). 线段树比树状数组麻 ...

  10. <jsp:forward>、requestDispatcher和sendRedirect()的区别

    1.会话信息保存在服务器内存上,可以断续访问,和cookie相比,其保存在服务器上. 2.男人就像蓝牙:只有在你接近时,他才会找上你.当你离开后,他便又去找其他的"设备"了.女人就 ...