《C++ Primer》学习笔记之第六章-main0.cpp程序的执行和注释

类别:编程语言 点击:0 评论:0 推荐:

//在运行栏输入:g++ -o main0.exe main0.cpp
#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;
}

/*
dumbo[107] ~/d.stdlib => a.out
please enter file name: alice_emma

line read: Alice Emma has long flowing red hair. Her Daddy says
line read: when the wind blows through her hair, it looks almost alive,
line read: like a fiery bird in flight. A beautiful fiery bird, he tells her,
line read: magical but untamed. "Daddy, shush, there is no such thing,"
line read: she tells him, at the same time wanting him to tell her more.
line read: Shyly, she asks, "I mean, Daddy, is there?"

number of lines: 6
maximum length: 66
longest line: like a fiery bird in flight. A beautiful fiery bird, he tells her,
----------- about to generate text read --------------
Alice Emma has long flowing red hair. Her Daddy says
when the wind blows through her hair, it looks almost alive,
like a fiery bird in flight. A beautiful fiery bird, he tells her,
magical but untamed. "Daddy, shush, there is no such thing,"
she tells him, at the same time wanting him to tell her more.
Shyly, she asks, "I mean, Daddy, is there?"
*/

 

 

本文地址:http://com.8s8s.com/it/it25734.htm