retrive()

 #include <algorithm>
#include <string>
#include <vector>
#include <utility>

#include <iostream>
#include <fstream>
#include <iterator>  //因为运用了ostream_iterator模板对象所以这是必须的,而原程序没有包含
#include <cstddef>

#include <ctype.h>

using namespace std; //为了方便,所以显式指定名字空间是标准名字空间

extern vector<string> *retrieve_text(); //这句是说retrieve_text在某处已经定义了,让编译程序自己去找,main会用到
                                                          

int main()
{
 vector<string> *text_file = retrieve_text(); //text_file是指向一个由string组成的vector的指针,由retrieve_text返回


 cout << "----------- about to generate text read --------------/n";
 ostream_iterator< string > output( cout, "/n" ); //这句是说output是//一个输出流迭代器,此迭代器锁定了string类型,与cout标准输出对象绑定,大部分情况下是显示器,对于读到的每一行都插入/n 换横符      
        copy( text_file->begin(), text_file->end(), output );//拷贝所有的text_file到标准输出,换句话说就是把text_file插入到标准输出

 return 0;
}

vector<string>*
retrieve_text()
{
 string file_name;
 
 cout << "please enter file name: ";
 cin  >> file_name;

 ifstream infile( file_name.c_str(), ios::in );//infile是一个ifstream //对象,当然ifstream是一个由typedef定义的模板类型,它锁定了char类型做为参量,构造函数需要一个const char*,ios::in的意义是首先ios是一个锁定char类型的流模板,而in是告诉流要为输入而打开一个文件
 if ( !infile ) {
  cerr << "oops! unable to open file "
       << file_name << " -- bailing out!/n";
  exit( -1 );
 }
 else if( infile.eof() ){
//我自己的修改,如果文本文件是空的,则退出不做这样的处理程序会在这样的情况下崩溃
  cerr << "Please don't input a empty file";
  cout << "/n";
  exit( -1 );
 }

 vector<string> *lines_of_text = new vector<string>;
        string textline;

        typedef pair<string::size_type, int> stats;
        stats maxline;
 int   linenum = 0;

        while ( getline( infile, textline, '/n' ))
 {
  cout << "line read: " << textline << "/n";

  if ( maxline.first < textline.length() )
  {
       maxline.first = textline.length();
       maxline.second = linenum;
  }

  lines_of_text->push_back( textline );
  linenum++;
 }

 cout << "/n";
        cout << "number of lines: "
             << lines_of_text->size() << "/n";

 cout << "maximum length: "  
      << maxline.first << "/n";

        cout << "longest line: "    
      << (*lines_of_text)[ maxline.second ] << "/n";
 
 return lines_of_text;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值