统计文件的字符数、单词数以及总行数,包括:
每行的字符数和单词数文件的总字符数、总单词数以及总行数
注意:
空白字符(空格和tab缩进)不计入字符总数;单词以空格为分隔;不考虑一个单词在两行的情况;限制每行的字符数不能超过1000。
请先看代码:
#include
#include
int *getCharNum(char *filename, int *totalNum);
int main(){
char filename[30];
// totalNum[0]: 总行数 totalNum[1]: 总字符数 totalNum[2]: 总单词数
int totalNum[3] = {0, 0, 0};
printf("Input file name: ");
scanf("%s", filename);
if(getCharNum(filename, totalNum)){
printf("Total: %d lines, %d words, %d chars\n", totalNum[0], totalNum[2], totalNum[1]);
}else{
printf("Error!\n");
}
return 0;
}
/**
* 统计文件的字符数、单词数、行数
*
* @param filename 文件名
* @param totalNum 文件统计数据
*
* @return 成功返回统计数据,否则返回NULL
**/
int *getCharNum(char *filename, int *totalNum){
FILE *fp; // 指向文件的指针
char buffer[1003]; //缓冲区,存储读取到的每行的内容
int bufferLen; // 缓冲区中实际存储的内容的长度
int i; // 当前读到缓冲区的第i个字符
char c; // 读取到的字符
int isLastBlank = 0; // 上个字符是否是空格
int charNum = 0; // 当前行的字符数
int wordNum = 0; // 当前行的单词数
if( (fp=fopen(filename, "rb")) == NULL ){
perror(filename);
return NULL;
}
printf("line words chars\n");
// 每次读取一行数据,保存到buffer,每行最多只能有1000个字符
while(fgets(buffer, 1003, fp) != NULL){
bufferLen = strlen(buffer);
// 遍历缓冲区的内容
for(i=0; i |