C++ Demo 001: 读取一个从命令行指定的文件,输出文件内容到显示器,并且给每一行输出添加一个行号...

缘起:

  这是一个朋友让帮忙写的,其实程序本身很简单,但是要求完全用C++ 风格来实现,尽量不要看到C 的影子,OK,那就试试看咯。

 

题目:

  写一个程序,读取一个利用命令行指定的文本文件,输出文件内容到显示器,并且给每一行输出添加一个行号

 

环境:

  Windows XP Professional sp3 下面用 GNU GCC 的编译器编译。

  采用这个编译器因为它是开源的,很容易下载到,而且Linux 上也可以用,还有一个比较关键的,它支持标准C++。推荐使用!*^_^*

 

实验步骤:

  1,新建一个文本文件,命名 "add_line_number.cpp"。

  2,添加如下代码到文件中:

 
  
#include < iostream >
#include
< fstream >
#include < string >

using namespace std;

int main( int argc, char ** argv)
{
if (argc != 2 )
{
cout
<< " Please use command like: my_print add_line_number.cpp " << endl;
return 1 ;
}

fstream fFile(argv[
1 ], ios:: in | ios:: out ); // 事实上,后面的打开模式可以不写,这是fstream 打开文件的默认方式
if ( ! fFile.is_open())
{
cout
<< " Open file error! Application will exit. " << endl;
return 2 ;
}

string strTextLine;
string ::size_type i = 1 ;
while (getline(fFile, strTextLine, ' \n ' ))
{
if (i < 10 )
{
cout
<< " " << i ++ << " .| " << strTextLine << endl;
}
else
{
cout
<< i ++ << " .| " << strTextLine << endl;
}
}
fFile.close();

return 0 ;
}

  3,编译 "add_line_number.cpp" 。

 
  
\cpp> g ++ add_line_number.cpp - o main

  4,OK,应该会在与 "add_line_number.cpp" 相同文件夹下生成 main.exe 文件。

  打开命令行提示符窗口 ( 开始 -> 运行 -> cmd ) ,接着输入 main add_line_number.cpp ,输出我们这个小程序的源代码。没问题的话,应该可以看到最终的效果了。

  2010091614273631.jpg

 

讨论:

  小程序到此就结束了,程序很简单,不多解释了,我会慢慢添加关于 C++ 标准库的小练习,穿插着就可以把一些需要熟悉的类或者容器的基本用法给弄明白了。

  好了,回来这个小程序。是否还有其他的方法来高效读取文件呢?对于大体积的文件,又如何呢?

  程序尽管简单,但是需要讨论的问题不少,比如:

    1. 如果是一个电话号码的记事本,格式形如:

            张三, 13955665566

            李四, 15812345678

            王二, 13612344321

            ……

    其中,姓名可能是重复的,但是电话号码是唯一的,还有可能由于记录人的疏忽,记录了一条重复的记录。那如何去重,并排序后输出呢?

    2. 这里没有对文件进行异常处理,应该加上,尽管是小练习。这里,我投机一把,嘿嘿,直接让他退出了。

    3. 正在想 …… -_-

 

总结:

  本程序就完全用 C++ 的方式来实现题目的要求了,看不到C 的影子,其实,也就是用C++ 标准库里面的 string 去代替了 C 中可能会用的 char * 以及字符数组。

转载于:https://www.cnblogs.com/PerfectString/archive/2010/09/16/add_line_number.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值