设为首页 加入收藏

TOP

C++基础学习教程(三)
2015-07-24 06:00:04 来源: 作者: 【 】 浏览:8
Tags:基础 学习教程

承接上一讲。

2.7文件I/O

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

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


 
 
 

/*************************************************************************
    > File Name: list1301_file.cpp
    > Author: suool
    > Mail: 1020935219@qq.com 
    > Created Time: 2014年05月22日 星期四 22时15分11秒
 ************************************************************************/

#include
  
   
#include
   
     #include
    
      #include
     
       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; } 
     
    
   
  

文件内容:

\

读操作结果:

\

<??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PC9wPgo8cD7Iu7rzysfQtM7EvP6jrMq+wP3I58/Co7o8L3A+CjxwPjwvcD4KPHByZSBjbGFzcz0="brush:java;">/************************************************************************* > 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 #include #include 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 << '\n'; 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
  
   
#include
   
     #include
    
      #include
     
       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
  
   
#include
   
     #include
    
      #include
     
       #include
      
        #include
       
         #include
         using namespace std; int main() { map
         
           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
          
           ::iterator iter(counts.begin()); iter != counts.end(); ++iter) { // Print the word, tab, the count, newline. cout << iter->first << '\t' << iter->second << '\n'; out << iter->first << '\t' << iter->second << '\n'; } 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 
  
   
#include 
   
     #include 
    
      #include 
      #include
      
        #include 
       
         // Aligning Words and Counts Neatly using namespace std; int main() { map
        
          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
         
          ::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
          
           ::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 << '\n'; out << setw(longest) << left << iter->first << setw(count_size) << right << iter->second << '\n'; } return 0; } 
          
         
        
       
      
    
   
  

文件内容:

\

运行结果:

\

\

下面一个例子是搜索映射中的指定键:

/*************************************************************************
    > File Name: list1401_data_serach.cpp
    > Author: suool
    > Mail: 1020935219@qq.com 
    > Created Time: 2014年05月24日 星期六 15时17分30秒
 ************************************************************************/

#include
  
   
#include
   
     #include
    
      #include
     
       #include
      
        #include
        using namespace std; int main() { map
        
          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!!! \n"; while(in >> word) { ++counts[word]; out << word << '\n'; } out.close(); map
         
          ::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\n"; else cout << "\"the\" occurs " << the->second << " times\n"; return 0; } 
         
        
      
     
    
   
  

文件内容:

\

运行结果:




未完待续。。。。。。。。。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇算法6-2:解决哈系冲突之独立链表 下一篇POJ 2253-Frogger (Prim)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: