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 ,输出我们这个小程序的源代码。没问题的话,应该可以看到最终的效果了。
讨论:
小程序到此就结束了,程序很简单,不多解释了,我会慢慢添加关于 C++ 标准库的小练习,穿插着就可以把一些需要熟悉的类或者容器的基本用法给弄明白了。
好了,回来这个小程序。是否还有其他的方法来高效读取文件呢?对于大体积的文件,又如何呢?
程序尽管简单,但是需要讨论的问题不少,比如:
1. 如果是一个电话号码的记事本,格式形如:
张三, 13955665566
李四, 15812345678
王二, 13612344321
……
其中,姓名可能是重复的,但是电话号码是唯一的,还有可能由于记录人的疏忽,记录了一条重复的记录。那如何去重,并排序后输出呢?
2. 这里没有对文件进行异常处理,应该加上,尽管是小练习。这里,我投机一把,嘿嘿,直接让他退出了。
3. 正在想 …… -_-
总结:
本程序就完全用 C++ 的方式来实现题目的要求了,看不到C 的影子,其实,也就是用C++ 标准库里面的 string 去代替了 C 中可能会用的 char * 以及字符数组。