• C++基础学习教程(三)


    承接上一讲。

    2.7文件I/O

    关于读写文件,C++中有一个专门的头文件<fstream>。

    首先是读文件演示样例,例如以下:

    </pre><pre>

    /*************************************************************************
        > File Name: list1301_file.cpp
        > Author: suool
        > Mail: 1020935219@qq.com 
        > Created Time: 2014年05月22日 星期四 22时15分11秒
     ************************************************************************/
    
    #include<cstdio>
    #include<iostream>
    #include<fstream>
    #include<string>
    
    using namespace std;
    
    int main()
    {
        ifstream in ("list1301.txt");
        if (not in )
        {
            perror("list1301.txt");
        }
        else
        {
            string x;
            while(in >> x)
            {
                cout << x << endl;
            }
            in.close();
        }
        return 0;
    }
    

    文件内容:

    读操作结果:

    然后是写文件,示比例如以下:

    /*************************************************************************
        > File Name: list1302_write.cpp
        > Author: suool
        > Mail: 1020935219@qq.com 
        > Created Time: 2014年05月24日 星期六 12时24分23秒
        > Aim at:Copying Integers from a Named File to a Named File
     ************************************************************************/
    
    #include <cstdio>
    #include <fstream>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        // Read data from file in
        ifstream in("data.txt");
        if (not in)
            perror("data.txt");  // 文件不存在
        else
        {
            ofstream out("out.txt");  // Write the data to out
            if (not out)
                perror("out.txt"); // 文件不存在
            else
            {
                int x(0);
                while (in >> x)
                    out << x << '
    ';
                out.close();
                in.close();     // 关闭文件流
            }
        }
    return 0;
    }
    

    文件内容例如以下:



    执行结果:


    只是上面的读写文件存在一定的问题。就是程序没有检查输出操作是否成功运行,以下的程序的改造就是带有最小错误检查的演示样例:

    /*************************************************************************
        > File Name: list1302_write_check.cpp
        > Author: suool
        > Mail: 1020935219@qq.com 
        > Created Time: 2014年05月24日 星期六 12时58分50秒
     ************************************************************************/
    
    #include<iostream>
    #include<string>
    #include<fstream>
    #include<cstdio>
    using namespace std;
    int main()
    {
        // read data from in
        ifstream in("data.txt");
        if(not in)
            perror("data.txt");
        else
        {
            ofstream out("out.txt");
            if(not out)
                perror("out.txt");
            else
            {
                int x(0);
                while(in >> x)
                    out << x<< endl;
                out.close();
                if(not out)
                {
                    perror("ou.txt");
                }
            }
        }
        return 0;
    }
    

    就是这一部分:


    2.8数据结构——映射

    前面我们已经介绍并学习了C++的一个特有的数据结构——向量。如今我要介绍另外一个C++的特有数据结构——映射,其它的高级语言成称之为字典等,事实上都一样就是键值对的映射罢了。当中键是唯一的。值不限。

    以下是一个演示样例:

    /*************************************************************************
        > File Name: list1401_data.cpp
        > Author: suool
        > Mail: 1020935219@qq.com 
        > Created Time: 2014年05月24日 星期六 13时17分39秒
     ************************************************************************/
    
    // 读取单词并统计出现的次数
    #include<cstdio>
    #include<iomanip>
    #include<ios>
    #include<iostream>
    #include<fstream>
    #include<string>
    #include<map>
    
    using namespace std;
    int main()
    {
        map<string, int> counts;
        string word;
        
        fstream in("data.txt");
        if(not in)
        {
            perror("data.txt");
        }
        // Read words from the standard input and count the number of times
        // each word occurs.
        cout << "Read words from data.txt, spreate by blank space" << endl;
        // For each word/count pair...
        ofstream out("out.txt");
        if(not out)
        {
            perror("out.txt");
        }
        while(in >> word)
        {
            ++counts[word];
           out << word << endl;
        }
       // out.close();
        in.close();
        cout << "The words and count are:" << endl;
        out << "The words and count are:" << endl;
        for (map<string,int>::iterator iter(counts.begin()); iter != counts.end(); ++iter)
        {
            // Print the word, tab, the count, newline.
            cout << iter->first << '	' << iter->second << '
    ';
            out << iter->first << '	' << iter->second << '
    ';
        }
        out.close();
        if(not out)
        { 
            perror("out.txt"); 
        }
        return 0;
    }
    

    数据文件依旧上面那个,结果例如以下:



    面一个演示样例是利用迭代器循环格式化输出映射内容:

    /*************************************************************************
        > File Name: list1401_data_compat.cpp
        > Author: suool
        > Mail: 1020935219@qq.com 
        > Created Time: 2014年05月24日 星期六 14时58分34秒
     ************************************************************************/
    
    #include <iomanip>
    #include <ios>
    #include <iostream>
    #include <map>
    #include<fstream>
    #include <string>
    
    // Aligning Words and Counts Neatly
    
    using namespace std;
    
    int main()
    {
        map<string, int> counts;
        string word;
        // read data from data.txt
        fstream in("data.txt");
        if(not in)
        {
            perror("data.txt");
        }
       
        cout << "Read words from data.txt, spreate by blank space" << endl;
        ofstream out("out.txt");
        if(not out)
        {
            perror("out.txt");
        }
        // write data to out.txt
        out << "Begin !!!! Hahahahahahahhaha" << endl; 
        while(in >> word)
        {
            ++counts[word];
            out << word << endl;
        }
    
        // Determine the longest word.
        string::size_type longest(0);
        for (map<string,int>::iterator iter(counts.begin()); iter != counts.end(); ++iter)
            if (iter->first.size() > longest)
            longest = iter->first.size();
              
        // For each word/count pair...
        const int count_size(10); // Number of places for printing the count
        out << "Hahahahahahahhaha!!!!" << endl;
        for (map<string,int>::iterator iter(counts.begin()); iter != counts.end(); ++iter)
        { 
            // Print the word, count, newline. Keep the columns neatly aligned.
            cout << setw(longest)    << left  << iter->first <<
                setw(count_size) << right << iter->second << '
    ';
            
            out << setw(longest)    << left  << iter->first <<
                setw(count_size) << right << iter->second << '
    ';
        }
        return 0;         
    }
    

    文件内容:


    执行结果:



    以下一个样例是搜索映射中的指定键:

    /*************************************************************************
        > File Name: list1401_data_serach.cpp
        > Author: suool
        > Mail: 1020935219@qq.com 
        > Created Time: 2014年05月24日 星期六 15时17分30秒
     ************************************************************************/
    
    #include<cstdio>
    #include<fstream>
    #include<iomanip>
    #include<iostream>
    #include<string>
    #include<map>
    
    using namespace std;
    int main()
    {
        map<string, int> counts;
        string word;
    
        // read data from data.txt
        ifstream in ("word.txt");
        if(not in)
        {
            perror("word.txt");
        }
        // write data to out.txt
        ofstream out ("out.txt");
        if(not out)
        {
            perror("out.txt");
        }
        out << "Begin !!!! Hahahhahahah!!! 
    ";
        while(in >> word)
        {
            ++counts[word];
            out << word << '
    ';
        }
        out.close();
    
        map<string, int>::iterator the(counts.find("the"));
        if(the == counts.end())
            cout << ""the" is not found!!!!" << endl;
        else if(the->second == 1) 
            cout << ""the" occurs " << the->second << " time
    ";
        else
            cout << ""the" occurs " << the->second << " times
    ";
            
        return 0;
    }
    
    

    文件内容:

    执行结果:




    未完待续。

    。。。。。

    。。


  • 相关阅读:
    input type = file 上传图片转为base64
    vue-cli 搭建的项目,无法用本地IP访问
    js小数点精度问题
    虚拟机安装软件必备技术之一 --虚拟机快照技术
    Linux 关机命令总结
    查询模块错误排查
    - Oracle 闪回特性(FLASHBACK DATABASE)
    ORACLE密码过期,修改密码
    查看sql执行进度
    ORACLE CPU过高的sql查询
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/7220608.html
Copyright © 2020-2023  润新知