统计一个文件中单词的个数,行数,以及字符的个数,空格的数量;
忽略换行,文件中只有英文字母及空格和标点;
不考虑一个单词在两行的情况;
例如:文件名:filename.txt
hello world,i love you!
byby!
输出:
1---5---23---4
2---1---15---10
行:2---单词:6---字符:38---空格:14
代码如下:
#include <stdio.h>
#include <string.h>
int *GetNum(int *filename,int *TotalNum);
int main()
{
int ToaNum[4]={0};
char filename[30];
int *num=NULL;
printf("please input the filename:\n");
scanf("%s",filename);
num=GetNum(filename,ToaNum);
printf("行:%d---单词:%d---字符:%d---空格:%d\n",num[0],num[1],num[2],num[3]);
return 0;
}
int *GetNum(int *filename,int *TotalNum)
{
FILE *fp; //读取的文件指针;
char buffer[1002];//缓冲区的大小;
int LEN; //读取一行文件的长度;
int i ;
int islastblank=0;//判断上一个字符是不是空格;
int WordNum=0;
int CharNum=0;
int blank=0;
//1.打开文件;
if((fp=fopen(filename,"rb"))==NULL)
{
printf("fopen error!");
return NULL;
}
//2.读取一行;
while(fgets(buffer,1002,fp)!=NULL)
{
LEN=strlen(buffer);
for(i=0;i<LEN;i++)
{
char c=buffer[i];
//3.判断是否为空格 或者 Tab键;
if(c == '\t' || c==' ')
{//若是,WordNum++;
blank++;
if(i==0)
{//刚开始进去就是空格,不能算;
islastblank=1;
}
else
{
!islastblank && WordNum++;
islastblank=1;
}
}
if(c!='\r' && c!='\n')//4.判断是否为换行;
{//若不是,CharNum++;
CharNum++;
if(c == '\t' || c==' ')
islastblank=1;
else
islastblank=0;
}
}
!islastblank && WordNum++;
islastblank=0;
TotalNum[0]++;
TotalNum[1]+=WordNum;
TotalNum[2]+=CharNum;
TotalNum[3]+=blank;
printf("%d---%d---%d---%d\n",TotalNum[0],WordNum,CharNum,blank);
WordNum=0;
CharNum=0;
blank=0;
}
return TotalNum;
}
如果一个文件全部是标准的英文,中间只有一个空格隔开,那么简单统计英语单词的个数的代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
char str[50];
int LEN,i;
int count=0;
gets(str);
puts(str);
LEN=strlen(str);
for(i=0;i<LEN;i++)
{
while(str[i]!=' ' && str[i]!= '\0')
i++;
if(str[i]==' ')
count++;
}
count++;
printf("%d\n",count);
return 0;
}
本人愚钝,领悟至此,颇有感慨,与己共勉,陋文浅显,见者海涵!