C++ iostream标准库

  1. iostream分为输入输出流,即istream和ostream,其针对控制窗口的输入输出;常见的输入输出函数有cin cout cerror;
  2. fstream主要是来解决文件操作流,也是iostream的衍生类(包含输入输出),我们知道的有ifstream和ofstream;
  3. sstream主要是来解决c风格的字符串操作流,也是iostream的衍生类(包含输入输出),我们知道的有istrstream和ostrstream;如果想解决c++字符串的流,就要使用stringstream;

以下用存取文件的例子来说明ifstream和ofstream:

void write_file()
{
    ofstream myfile("c:\\1.txt", ios::app, _SH_DENYNO);
    if (myfile.fail())
    {
        cout << "文件打开失败";
        myfile.open("c:\\1.txt", ios::out | ios::trunc, _SH_DENYNO);
    }
    myfile << "中国软件开发实验室" << endl << "网址:" << "www.cndev- lab.com" << endl;
    myfile.close();

}

void read_file()
{
    ifstream myfile("c:\\1.txt", ios::out, _SH_DENYNO);
    char ch;
    string content;
    while (myfile.get(ch))
    {
        content += ch;
    }
    cout << content << endl;
    myfile.close();
}

/**
 * iostream集成输入输出
 */
void read_write(const string &in_path,const string &out_path)
{
    ifstream in_file(in_path, ios::out, _SH_DENYWR);
    char cc;
    string content;
    while (in_file.get(cc))
    {
        content += cc;
    }
    ofstream out_file(out_path, ios::out, _SH_DENYWR);
    out_file << content << endl;
    out_file.close();
    in_file.close();
}

ifstream和ofstream解决了从流到char *的转换,代码如下:

using namespace std;

void read_str()
{
    char *name = "www.cndev-lab.com";
    istrstream is(name, strlen(name) + 1);
    char read;
    while (is.get(read))
    {
        cout << read;
    }
    cout << endl;
}

void write_str()
{
    int arraysize = 1;
    char *pbuffer = new char[arraysize];
    ostrstream ostr(pbuffer, arraysize, ios::out);
    ostr << arraysize << ends;//使用ostrstream输出到流对象的时候,要用ends结束字符串
    cout << pbuffer;
    delete[] pbuffer;
}

/**
 * stringstream解决类型转换
 */
void test_stringstream()
{
    stringstream ost("hello world");
    ost.put(‘\n‘);
    ost << "OK";
    cout << ost.str() << endl;

    //stringstream sstr; //--------int转string-----------
    //int a = 100; string str;
    //sstr << a;
    //sstr >> str;
    //cout << str << endl; //--------string转char[]--------
    //sstr.clear();
    ////如果你想通过使用同一stringstream对象实现多种类型的转换,
    ////请注意在每一次转换之后都必须调用clear() 成员函数。
    //string name = "colinguan";
    //char cname[200];
    //sstr << name;
    //sstr >> cname;
    //cout << cname;
}

对于文件的打开 传输状态 ,c++定义了如下两种方式

第一种,通过状态值判断

  • goodbit 无错误
  • Eofbit 已到达文件尾
  • failbit 非致命的输入/输出错误,可挽回
  • badbit 致命的输入/输出错误,无法挽回
/**
 *  通过状态修改
 */
void stream_state()
{
    int a=0;
    cin >> a;
    cout << cin.rdstate() << endl;
    if (cin.rdstate() == ios::goodbit)
    {
        cout << "输入数据的类型正确,无错误!" << endl;
    }
    if (cin.rdstate() == ios_base::failbit)
    {
        cout << "输入数据类型错误,非致命错误,可清除输入缓冲区挽回!" << endl;
    }
}

第二种,通过方法判断

bool bad(); bool eof();

bool fail(); bool good();

void stream_state_method()
{
    /*
    int a=0; cin >> a;
    cout << cin.rdstate() << endl;
    cin.clear(ios::goodbit);
    cout << cin.rdstate() << endl;
    */

    int a=0;
    while (1) {
        cin >> a;
        if (cin.fail()){
            cout<<"输入有错!请重新输入"<<endl;
            cin.clear();
            cin.get();
        }
        else{
            cout<<a; break;
        }
    }
}

参考文件:http://www.cppblog.com/yuqilin1228/archive/2010/03/26/110620.html

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-22 11:25:34

C++ iostream标准库的相关文章

C++的iostream标准库介绍(转自http://dev.yesky.com/420/2525920.shtml)

为什么需要iostream 我们从一开始就一直在利用C++的输入输出在做着各种练习,输入输出是由iostream库提供的,所以讨论此标准库是有必要的,它与C语言的 stdio库不同,它从一开始就是用多重继承与虚拟继承实现的面向对象的层次结构,作为一个c++的标准库组件提供给程序员使用. iostream为内置类型对象提供了输入输出支持,同时也支持文件的输入输出,类的设计者可以通过对iostream库的扩展,来支持自定义类型的输入输出操作. 为什么说要扩展才能提供支持呢?我们来一个示例. #inc

【C++ Primer每日刷】之三 标准库 string 类型

标准库 string 类型 string 类型支持长度可变的字符串,C++ 标准库将负责管理与存储字符相关的内存,以及提供各种有用的操作.标准库string 类型的目的就是满足对字符串的一般应用. 与其他的标准库类型一样,用户程序要使用 string 类型对象,必须包含相关头文件.如果提供了合适的 using 声明,那么编写出来的程序将会变得简短些: #include <string> using std::string; 1.1 string 对象的定义和初始化 string 标准库支持几个

3.2 标准库类型string(上)

#include <string> #include <iostream> using std::string; using std::cin; using std::cout; using std::endl; //string定义在命名空间std中 int main() { /**************3.2.1 定义和初始化string*****************/ string s1; //默认初始化,S1是一个空字符串 string S2 = s1; //S2时S

STL标准库-容器-list

摘要: 技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性. list 表示非连续的内存区域,并通过一对指向首尾元素的指针双向链接起来,从而允许向前和向后两个方向进行遍历.在list 的任意位置插入和删除元素的效率都很高. 它的结构 一 定义 头文件 #include <vector> #include <iostream> #include <list> using namespace std; int main(int argc, const c

C++标准库和标准模板库

C++强大的功能来源于其丰富的类库及库函数资源.C++标准库的内容总共在50个标准头文件中定义. 在C++开发中,要尽可能地利用标准库完成.这样做的直接好处包括: (1)成本:已经作为标准提供,何苦再花费时间.人力重新开发呢: (2)质量:标准库的都是经过严格测试的,正确性有保证: (3)效率:关于人的效率已经体现在成本中了,关于代码的执行效率要相信实现标准库的大牛们的水平: (4)良好的编程风格:采用行业中普遍的做法进行开发. 一.C++标准库 C++标准库的内容分为10类, 分别是:C1.语

c++多线程编程:实现标准库accumulate函数的并行计算版本

今天使用c++实现了标准库头文件<numeric>中的accumulate函数的并行计算版本,代码如下,注释写的比较详细,仅对其中几点进行描述: ①该实现假定不发生任何异常,故没有对可能产生的异常进行处理 ②第42行的语句: const unsigned int num_thread = std::min((hardware_thread != 0 ? hardware_thread : 2), max_thread); 要运行的线程数是计算出的最大线程数和硬件线程数量的较小值.这是因为若运行

把《c++ primer》读薄(3-2 标准库vector容器+迭代器初探)

督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 标准库vector类型初探,同一种类型的对象的集合(类似数组),是一个类模版而不是数据类型,学名容器,负责管理 和 存储的元素 相关的内存,因为vetcor是类模版,对应多个不同类型,比如int,string,或者自己定义的数据类型等. 程序开头应如下声明 #include <iostream> #include <vector> #include <string> using std::strin

程序设计语言-标准库概述

1 认识标准库 没有任何一个重要程序只用某种赤裸裸的程序设计语言写出的:首先总要开发出一组支持库,这也形成了进一步工作的基础. 2 第一个程序 #include<iostream>  //指编译器包含位于iostream里的标准流I/O功能的声明 int main() //定义一个main()函数,该函数没有参数,也不做任何事情 { std::cout<<"hello,world!\n"; //字符串文字量"hello,world!\n"将被

STL笔记(6)标准库:标准库中的排序算法

STL笔记(6)标准库:标准库中的排序算法 标准库:标准库中的排序算法The Standard Librarian: Sorting in the Standard Library Matthew Austern http://www.cuj.com/experts/1908/austern.htm?topic=experts 用泛型算法进行排序    C++标准24章有一个小节叫“Sorting and related operations”.它包含了很多对已序区间进行的操作,和三个排序用泛型