zoukankan      html  css  js  c++  java
  • 0712-----C++Primer听课笔记----------IO流

    0.不要试着从C++编译器的角度理解问题,而是从程序的语义着手。

    1.控制台标准输入输出流的使用

    1.1IO对象不可复制或者赋值。因此使用IO对象做参数必须使用非const 引用参数(非const因为对IO对象的读写会改变其状态)。

    1.2当cin输入非法数据时,fail置为1,当cin遇到文件结尾(ctrl+D)时, fail和eof都为1。

    #include <iostream>
    #include <string>
    #include <vector>
    
    using namespace std;
    
    /*
     *num是int型,当输入字符串时 cin >> num  会失败
     * 这种情况下会对num做一个初始化的操作,并且之后cin也不可用
     */
    
    int main(int argc, const char *argv[])
    {
        int num;
        cin >> num ;
        cout << num << endl;
    
        cout << "cin.good = " << cin.good() << endl;
        cout << "cin.bad = " << cin.bad() << endl;
        cout << "cin.eof = " << cin.eof() << endl;
        cout << "cin.fail = " << cin.fail() << endl;
    
        cout  << "-------------------"  << endl;
    
        string s;
        cin  >> s;
        cout << s << endl;
    
        cout << "cin.good = " << cin.good() << endl;
        cout << "cin.bad = " << cin.bad() << endl;
        cout << "cin.eof = " << cin.eof() << endl;
        cout << "cin.fail = " << cin.fail() << endl;
        return 0;
    }

    1.3对于cin 可用的时候为TRUE, 不可用的时候为FALSE。

    #include <iostream>
    #include <string>
    #include <vector>
    #include <fstream>
    #include <stdexcept>
    
    using namespace std;
    /*
     *文件流对象可用时为true 不可用时为false
     */
    
    ifstream & open_file(ifstream &is, const string &file){
        is.close();
        is.clear();
        is.open(file.c_str());
        return is;
    }
    
    int main(int argc, const char *argv[])
    {
    
        ifstream is;
        string filename("a.txt");
        if(!open_file(is, filename)){
            throw std::runtime_error("file open filed!");
        }
        is.close();
        return 0;
    }

    2.文件流的运用

    2.1 ifstream  输入文件流(注意这里的输入输出是相对于程序来说的)

    2.1.1 读一行显示到终端

    #include <iostream>
    #include <string>
    #include <vector>
    #include <fstream>
    
    using namespace std;
    /*
     *每次从文件中读一行 然后输出到屏幕
     */
    int main(int argc, const char *argv[])
    {
        ifstream is;
        is.open("a.txt");
        string line;
        while(getline(is, line)){
            cout << line << endl;
        }
        is.close(); //文件流最后要关闭
        return 0;
    }

    2.1.2 每次读一个单词 存入vector容器中

    #include <string>
    #include <vector>
    #include <fstream>
    
    using namespace std;
    /*
     *读取文件中的单词 并存储到vector容器中
     */
    int main(int argc, const char *argv[])
    {
        string filename = "a.txt";
        ifstream is;
        is.open(filename.c_str());
        vector<string> vec;
        string word;
        while(is >> word){
            vec.push_back(word);
        }
        is.close();
        cout << "word_num = " << vec.size() << endl;
        for(vector<string>::iterator it = vec.begin(); it != vec.end(); ++it){
            cout << *it << " ";
        }
        cout << endl;
        return 0;
    }

    2.2 ostream  输出文件流

    2.2.2 将vector中存储的字符串 写到文件中

    #include <iostream>
    #include <string>
    #include <vector>
    #include <fstream>
    using namespace std;
    
    int main(int argc, const char *argv[])
    {
        ofstream os;
        os.open("out.txt");
        vector<string> vec;
        vec.push_back("hello");
        vec.push_back("world");
        for(vector<string>::iterator it = vec.begin(); it != vec.end(); ++it){
            os << *it << endl;
        }
        os.close();
        return 0;
    }

    1.2.3 将一个文件的内容拷贝到另外一个文件中去

    #include <iostream>
    #include <string>
    #include <vector>
    #include <fstream>
    
    using namespace std;
    
    int main(int argc, const char *argv[])
    {
        ifstream is;
        ofstream os;
        is.open("a.txt");
        os.open("b.txt");
        string line;
        while(getline(is, line) ){
            os << line << endl;
        }
        os.close();
        is.close();
        return 0;
    }

    3.字符串流

    3.1 从文件中读一行存到vector中后,并把一行中的单词存到另一个vector中。

    #include <iostream>
    #include <string>
    #include <vector>
    #include <sstream>
    #include <fstream>
    
    using namespace std;
    
    int main(int argc, const char *argv[])
    {
    
        ifstream is;
        vector<string> lines, words;
        is.open("a.txt");
        istringstream ss;
        string line, word;
        while(getline(is, line)){
            lines.push_back(line);
            ss.str(line); //
            while(ss >> word){
                words.push_back(word);
            }
           ss.clear();
        }
        is.close();
        for(vector<string>::iterator it = lines.begin(); it != lines.end(); ++it){
            cout << *it << endl;
        }
        cout << "------------------------" << endl;
        for(vector<string>::iterator it = words.begin(); it != words.end(); ++it){
            cout << *it << " ";
        }
        cout << endl;
        return 0;
    }
  • 相关阅读:
    前端 HTML
    python3内置函数
    内置函数的随机验证码
    线程、进程以及协程,上下文管理器
    线程池的定义方法
    python_控制台输出带颜色的文字方法
    while 循环 continue break 用法例子
    JVM 基础知识
    ios 设置状态栏文本颜色为白色
    ios 常用第三方库要加的framework,ARC的设置
  • 原文地址:https://www.cnblogs.com/monicalee/p/3840413.html
Copyright © 2011-2022 走看看