频道栏目
首页 > 程序开发 > 综合编程 > 其他综合 > 正文
统计文件中字符个数
2015-09-07 08:55:40         来源:hongbochen1223的专栏  
收藏   我要投稿

所谓“文件”是指一组相关数据的有序集合。这个数据集有一个名称
叫做文件名。文件通常是驻留在外部介质上的,在使用的时候才调
入内存中。

就文件的分类,有很多种分类方式,在这里我们看一下文件编码方式。
根据文件的编码方式,文件可以分为ASCII码文件和二进制文件。
ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个
字节,用于存放对应的ASCII码。例如,数字5678的存储形式为:
ASCII码: 00110101 00110110 00110111 00111000
十进制码: 5 6 7 8
共占用4个字节。ASCII码文件可在屏幕上按照字符显示。

二进制文件是按照二进制的编码方式来存放文件的。例如,数字5678的
存储形式为00010110 00101110,只占两个字节,二进制文件虽然可以在屏幕上显示,但是其内容无法读懂。C语言处理这些文件的时候,并不区分类型,都看成是字符流,按字节进行处理。

文件指针在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对他所指的文件进行各种操作。定义文件指针的一般形式为”FILE “指针变量标识符。其中FILE应为大写,他实际上是由系统定义的一个结构,该结构中含有文件名,文件状态和文件当前位置等信息。在编写源程序的时候,不必关心FILE结构的细节。例如”FILE fp”表示fp是指向FILE结构的指针变量,通过fp即可找到存放某个文件信息的结构变量,然后按照结构变量提供的信息找到该文件,实施对文件的操作。

在C语言中,文件操作都是由库函数来完成的。文件操作主要有打开,读写和关闭等。

1:文件打开函数fopen

fopen函数用来打开一个文件,其调用的一般形式为:
文件指针名 = fopen(文件名,使用文件方式)
其中,“文件指针名”必须被说明为FILE类型的指针变量,“文件名”是被打开文件的文件名。
“使用文件方式”是指文件的类型和操作要求。“文件名”是字符串常量或字符串数组。
例如:
FILE fp;
fp = fopen(“file.a”,”r”);
//他的意思是在当前目录下打开文件file.a,只允许进行“读”操作,并且使得fp指向该文件
使用文件的方式一共有12种。

这里写图片描述vcq909DS1M/CvLi148u1w/ejujwvcD4NCjxwPs7EvP7KudPDt73KvdPJcix3LGEsdCxiLCu5sja49tfWt/vX6brPs8mjrLj3uPbX1rf7tcS6rNLlysejunIocmVhZCm2waOsdyh3cml0ZSnQtKOsPGJyIC8+DQphKGFwcGVuZCnXt7zTo6x0KHRleHQpzsSxvs7EvP6jrL/JyqHC1LK70LSju2IoYmluYXJ5Kbb+vfjWxs7EvP47JnJkcXVvOysmcmRxdW87tsG6zdC0PGJyIC8+DQrTw3K08r+q0ru49s7EvP61xMqxuvKjrLjDzsS8/rHY0OvS0b6ttObU2qOsx9LWu8TctNO4w87EvP62wbP2PGJyIC8+DQrTw3e08r+qtcTOxLz+1rvE3M/yzsS8/tbQ0LTI66OsyPS08r+qtcTOxLz+sru05tTao6zU8tLU1ri2qLXEzsS8/sP7vajBojxiciAvPg0KuMPOxLz+o6zI57Tyv6q1xM7EvP7S0b6ttObU2qOs1PK9q7jDzsS8/sm+yKWjrLTT0MK9qMGi0ru49s7EvP48YnIgLz4NCsj00qrP8tK7uPbS0b6ttObU2rXEzsS8/te3vNPQwrXE0MXPoqOs1rvE3NPDYbe9yr208r+qzsS8/qGjtau0y8qxuMPOxLz+sdjQ68rHPGJyIC8+DQq05tTatcSjrLfx1PK9q7vhs/a07aGjPC9wPg0KPHA+1Nq08r+q0ru49s7EvP61xMqxuvKjrMjnufuz9rTto6xmb3Blbr2ru+G3tbvY0ru49r/V1rjV69a1TlVMTKGj1NqzzNDy1tC/ydLUPGJyIC8+DQrTw9Xi0rvQxc+iwLTF0LHwyse38c3qs8m08r+qzsS8/rXEuaTX96OssqLX9s/g06a1xLSmwO2ho77ZuPbA/dfTo7o8L3A+DQo8cD5pZigoZnA9Zm9wZW4oJmxkcXVvO2ZpbGUuYSZyZHF1bzssJnJkcXVvO3JiJnJkcXVvOykpID09IE5VTEwpPGJyIC8+DQp7PGJyIC8+DQpwcmludGYoJmxkcXVvOyBlcnJvciBubyBvcGVuIGZpbGUuYSEmcmRxdW87KTs8YnIgLz4NCmdldGNoKCk7PGJyIC8+DQpleGl0KDEpOzxiciAvPg0KfTwvcD4NCjxwPjxzdHJvbmc+MqO6udix1c7EvP48L3N0cm9uZz48L3A+DQo8cD6199PDtcTSu7Dj0M7KvcrHOjxiciAvPg0KZmNsb3NlKM7EvP7WuNXrKTs8YnIgLz4NCtX9s6PN6rPJudix1c7EvP6y2df3tcTKsbryo6xmY2xvc2W6r8r9t7W72Na1zqowo6zI57e1u9i3x8Hj1rXU8rHtyr7T0LTtzvO3osn6PC9wPg0KPHA+PHN0cm9uZz4zo7rOxLz+tsHQtLqvyv08L3N0cm9uZz48L3A+DQo8cD7U2kPT79HU1tDM4bmpwcu63LbgzsS8/rbB0LS1xLqvyv2ho9fWt/u2wdC0uq/K/WZnZXRjus1mcHV0Y6O719a3+7SutsHQtLqvyv1mZ2V0c7rNPGJyIC8+DQpmcHV0czvK/b7dv+m2wdC0uq/K/WZyZWFkus1md3JpdGWju7jxyr27r7bB0LS6r8r9ZnNjYW5mus1mcHJpbnRmo7vV4tCpuq/K/TxiciAvPg0Ktryw/Lqs1NpzdGRpby5ozbfOxLz+1tChozwvcD4NCjxwPjxzdHJvbmc+o6gxo6mjurbB19a3+7qvyv1mZ2V0Yzwvc3Ryb25nPjwvcD4NCjxwPmZnZXRjuq/K/bXEuabE3MrHtNPWuLaotcTOxLz+1tC2wcih0ru49tfWt/ujrLqvyv21xLX308PQzsq9zqqjujxiciAvPg0K19a3+7Hkwb8gPSBmZ2V0YyjOxLz+1rjV6ymjuzxiciAvPg0K16LS4s7EvP7WuNXrus3OxLz+xNqyv7XEzrvWw9a41evKx7K7zay1xKGjzsS8/ta41evKx9a4z/LV+7j2zsS8/rXEo6w8YnIgLz4NCtDo0qrU2rPM0PLW0Lao0uXLtcP3o6zWu9KqsrvW2NDCuLPWtaOszsS8/ta41eu1xNa1yseyu7HktcSho87EvP7E2rK/tcQ8YnIgLz4NCs671sPWuNXr08PS1Na4yr7OxLz+xNqyv7XEtbHHsLbB0LTOu9bDo6zDv7bB0LTSu7TOo6y4w9a41eu++c/yuvPSxravo6w8YnIgLz4NCsv7srvQ6NKq1NqzzNDy1tC2qNLly7XD96OstvjKx9PJz7XNs9fUtq/J6NbDtcShozwvcD4NCjxwPjxzdHJvbmc+KDIpOtC019a3+7qvyv1mcHV0Yzwvc3Ryb25nPjwvcD4NCjxwPmZwdXRjuq/K/bXEuabE3MrHsNHSu7j219a3+9C0yOvWuLaotcTOxLz+1tCjrLqvyv21xLX308PQzsq9zqqjujxiciAvPg0KZnB1dGMo19a3+6OszsS8/ta41espOzxiciAvPg0KZnB1dGO6r8r909DSu7j2t7W72Na1o6zI57n70LTI67PJuaajrNTyt7W72NC0yOu1xNfWt/ujrLfx1PK3tbvYRU9GPC9wPg0KPHA+PHN0cm9uZz4oMyk619a3+7SutsHQtLqvyv1mZ2V0c7rNZnB1dHM8L3N0cm9uZz48L3A+DQo8cD62wdfWt/u0rrqvyv1mZ2V0c7qvyv21xLmmxNzKx7TT1ri2qLXEzsS8/tbQtsHSu7j219a3+7Sutb3X1rf7yv3X6dbQo6w8YnIgLz4NCrqvyv21xLX308PQzsq9zqqjujxiciAvPg0KZmdldHMo19a3+8r91+nD+6OsbqOszsS8/ta41espOzxiciAvPg0KxuTW0G7Kx9K7uPbV/dX7yv2jrLHtyr60087EvP7W0LbBs/a1xNfWt/u0rrK7s6y5/W4tMbj219a3+6Os1Nq2wcjrtcTX7rrzPGJyIC8+DQrSu7j219a3+7zTyc+0rr3hyvix6sq2JnJzcXVvOyZyc3F1bzuho7bUZmdldHO6r8r909DBvbXjy7XD96O61Nq2wbP2bi0xuPbX1rf71q7HsKOsyOe5+zxiciAvPg0K0/a1vcHLu7vQ0Lf7u/LV38rHRU9Go6zU8r3hyviy2df3oaNmZ2V0c7qvyv3SstPQt7W72Na1o6zG5Le1u9jWtcrH19a3+8r91+m1xMrXPGJyIC8+DQq12Na3oaM8YnIgLz4NCtC019a3+7Suuq/K/bX308PQzsq9OjxiciAvPg0KZnB1dHMo19a3+7Suo6zOxLz+1rjV6yk7PC9wPg0KPHA+PHN0cm9uZz4oNCk6v+nK/b7dtsHQtLqvyv1mcmVhZLrNZndyaXRlPC9zdHJvbmc+PC9wPg0KPHA+tffTw9DOyr2jujxiciAvPg0KZnJlYWQoYnVmZmVyLHNpemUsY291bnQsZnApOzxiciAvPg0KZndyaXRlKGJ1ZmZlcixzaXplLGNvdW50LGZwKTs8YnIgLz4NCmJ1ZmZlcsrH0ru49ta41eujrNTaZnJlYWTW0KOsy/ux7cq+tOa3xcrkyOvK/b7dtcTK17XY1reho9TaZndyaXRl1tCjrDxiciAvPg0Ky/ux7cq+tOa3xcrks/bK/b7dtcTK17XY1reho3NpemWx7cq+yv2+3b/ptcTX1r3ayv2jrGNvdW50se3KvtKqtsHQtLXEPGJyIC8+DQrK/b7dv+m1xL/pyv2hozwvcD4NCjxwPjxzdHJvbmc+KDUpuPHKvbuvtsHQtLqvyv1mY2FuZrrNZnByaW50Zjwvc3Ryb25nPjwvcD4NCjxwPrX308PQzsq9o7o8YnIgLz4NCmZjYW5mKM7EvP7WuNXro6y48cq919a3+7Suo6zK5Mjrse3B0Ck7PGJyIC8+DQpmcHJpbnRmKM7EvP7WuNXro6y48cq919a3+7Suo6zK5LP2se3B0Ck7PC9wPg0KPHA+z8LD5r7NysfO0sPH1eK49sq1wP21xNKqx/OjujwvcD4NCjxwcmUgY2xhc3M9"brush:java;"> 编写统计文件的字符数的程序,主要学习文件的概念 和文件操作等内容。

下面是我的代码实现:

#include 
#include 

/**
 * 编写统计文件的字符数的程序,主要学习文件的概念
 * 和文件操作等内容。
 */
int main()
{
    /** 保存字符个数 **/
    int count = 0;

    /** 保存文件名 **/
    char fname[80];

    /** 文件指针 **/
    FILE *fp;

    printf(Please enter the file name:);
    scanf(%s,fname);

    if((fp = fopen(fname,r)) == NULL){
        printf(Open file failed!!
);
        exit(1);
    }

    count = 0;
    while(fgetc(fp) != EOF)
        count++;

    fclose(fp);

    printf(There are %d characters in file %s.
,count,fname);

    return 0;
}

下面是我的测试用例(名称为test.txt):

cnuidocncn  cwncviow 
wedcvnwicvmnw 
dcvnwidcvn 

cvwiovm 
 wvcewoivm 
w
evcovw 
vcmweiocvmw

mvciomvw 
nvi] v
wevmovjov
wvjkvnivpvm
wvciwmvw
'nvoikvv
nvwvmje

ewevvvv
wvwkvnpowiehf]ewnveiowv

好了,最后看一下我的运行过程:

这里写图片描述

除此之外,我们还可以对文件进行随机读写。在C中提供了一些文件定位的函数,我们常用的有两个:rewind和fseek。

这两个函数的调用形式分别为:

rewind(文件指针)。

他的功能是把文件内部的位置指针移到文件首。

fseek(文件指针,位移量,起始点);

将文件内部位置指针移动到我们想要的位置。

 

点击复制链接 与好友分享!回本站首页
相关TAG标签 个数 字符 文件
上一篇:Item 21:需要返回对象时,不要返回引用 Effective C++笔记
下一篇:数据结构中基本运算验证学习路线建议——以顺序表为例
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站