前言

上一章节简单介绍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. 三角网格(Triangle Mesh)的理解

    最简单的情形,多边形网格不过是一个多边形列表:三角网格就是全部由三角形组成的多边形网格.多边形和三角网格在图形学和建模中广泛使用,用来模拟复杂物体的表面,如建筑.车辆.人体,当然还有茶壶等.图14.1 ...

  2. phpmailer{群发并且发送附件}

    PHPMailer是一个用于发送电子邮件的PHP函数包. 第一,需要下载PHPMailer文件包phpmailer. http://phpmailer.sourceforge.net/     第二, ...

  3. 异步调用backgroudworker

    先看一个小例子:C#客户端打开一个控件,控件中加载了好多数据大约要用5秒中,如果我们直接打开控件,那么这个控件就要5秒中才能弹出来,当然这个时候用户已经把他Kill了.这个时候我们就需要先给用户把控件 ...

  4. 生产环境CentOS服务器系统安全配置

    转http://www.centoscn.com/CentosSecurity/CentosSafe/2014/1126/4192.html 账户安全及权限 禁用root以外的超级用户 删除不必要的账 ...

  5. php 执行linux 命令函数

    php的内置函数exec,system都可以调用系统命令(shell命令),当然还有passthru,escapeshellcmd等函数. 在很多时候利用php的exec,system等函数调用系统命 ...

  6. 17173php招聘

    学历要求:大专工作经历:4年↑薪资待遇:面议工作地点:北京市 资深PHP工程师岗位职责\\\"1.独立负责公司互联网产品的开发与测试2.主导负责相关系统维护,确保系统运行稳定可靠3.主导推动 ...

  7. STM32随记

    定时器(Timer): 分为高级,通用,基本三种. M3:8个 高级:TIM1,TM8 通用:TIM2~TIM5 基本:TIM6,TIM7 M0:8个 高级:TIM1 通用:TIM2,TIM3,TIM ...

  8. codeforces C. Painting Fence

    http://codeforces.com/contest/448/problem/C 题意:给你n宽度为1,高度为ai的木板,然后用刷子刷颜色,可以横着刷.刷着刷,问最少刷多少次可以全部刷上颜色. ...

  9. 在linux中使用php将word文档转为pdf

    使用本教程需要在linux中安装openoffice,改页面中有详细的安装与使用教程(http://www.cnblogs.com/sustudy/p/3999628.html). 既然,你看了该教程 ...

  10. log4j学习日记-写入数据库

    1.首先创建日志数据库 用的是MySQL CREATE TABLE `td_log` (   `lid` int(11) NOT NULL AUTO_INCREMENT,   `lusername` ...