100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 统计文件中字符个数

统计文件中字符个数

时间:2019-08-24 15:31:06

相关推荐

统计文件中字符个数

所谓“文件”是指一组相关数据的有序集合。这个数据集有一个名称

叫做文件名。文件通常是驻留在外部介质上的,在使用的时候才调

入内存中。

就文件的分类,有很多种分类方式,在这里我们看一下文件编码方式。

根据文件的编码方式,文件可以分为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种。

对于文件使用方式有以下几点说明:

文件使用方式由r,w,a,t,b,+共6个字符组合成,各个字符的含义是:r(read)读,w(write)写,

a(append)追加,t(text)文本文件,可省略不写;b(binary)二进制文件;”+”读和写

用r打开一个文件的时候,该文件必须已经存在,且只能从该文件读出

用w打开的文件只能向文件中写入,若打开的文件不存在,则以指定的文件名建立

该文件,如打开的文件已经存在,则将该文件删去,从新建立一个文件

若要向一个已经存在的文件追加新的信息,只能用a方式打开文件。但此时该文件必须是

存在的,否则将会出错。

在打开一个文件的时候,如果出错,fopen将会返回一个空指针值NULL。在程序中可以

用这一信息来判别是否完成打开文件的工作,并做相应的处理。举个例子:

if((fp=fopen(“file.a”,”rb”)) == NULL)

{

printf(“\nerror no open file.a!”);

getch();

exit(1);

}

2:关闭文件

调用的一般形式是:

fclose(文件指针);

正常完成关闭文件操作的时候,fclose函数返回值为0,如返回非零值则表示有错误发生

3:文件读写函数

在C语言中提供了很多文件读写的函数。字符读写函数fgetc和fputc;字符串读写函数fgets和

fputs;数据块读写函数fread和fwrite;格式化读写函数fscanf和fprintf;这些函数

都包含在stdio.h头文件中。

(1):读字符函数fgetc

fgetc函数的功能是从指定的文件中读取一个字符,函数的调用形式为:

字符变量 = fgetc(文件指针);

注意文件指针和文件内部的位置指针是不同的。文件指针是指向整个文件的,

需要在程序中定义说明,只要不重新赋值,文件指针的值是不变的。文件内部的

位置指针用以指示文件内部的当前读写位置,每读写一次,该指针均向后移动,

他不需要在程序中定义说明,而是由系统自动设置的。

(2):写字符函数fputc

fputc函数的功能是把一个字符写入指定的文件中,函数的调用形式为:

fputc(字符,文件指针);

fputc函数有一个返回值,如果写入成功,则返回写入的字符,否则返回EOF

(3):字符串读写函数fgets和fputs

读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符数组中,

函数的调用形式为:

fgets(字符数组名,n,文件指针);

其中n是一个正整数,表示从文件中读出的字符串不超过n-1个字符,在读入的最后

一个字符加上串结束标识’\0’。对fgets函数有两点说明:在读出n-1个字符之前,如果

遇到了换行符或者是EOF,则结束操作。fgets函数也有返回值,其返回值是字符数组的首

地址。

写字符串函数调用形式:

fputs(字符串,文件指针);

(4):块数据读写函数fread和fwrite

调用形式:

fread(buffer,size,count,fp);

fwrite(buffer,size,count,fp);

buffer是一个指针,在fread中,他表示存放输入数据的首地址。在fwrite中,

他表示存放输出数据的首地址。size表示数据块的字节数,count表示要读写的

数据块的块数。

(5)格式化读写函数fcanf和fprintf

调用形式:

fcanf(文件指针,格式字符串,输入表列);

fprintf(文件指针,格式字符串,输出表列);

下面就是我们这个实例的要求:

编写统计文件的字符数的程序,主要学习文件的概念和文件操作等内容。

下面是我的代码实现:

#include <stdio.h>#include <stdlib.h>/*** 编写统计文件的字符数的程序,主要学习文件的概念* 和文件操作等内容。*/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!!\n");exit(1);}count = 0;while(fgetc(fp) != EOF)count++;fclose(fp);printf("There are %d characters in file %s.\n",count,fname);return 0;}

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

cnuidocncn cwncviow wedcvnwicvmnw dcvnwidcvn cvwiovm wvcewoivm wevcovw vcmweiocvmwmvciomvw nvi] vwevmovjovwvjkvnivpvmwvciwmvw'nvoikvvnvwvmjeewevvvvwvwkvnpowiehf]ewnveiowv

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

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

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

rewind(文件指针)。

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

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。