Gitee 代码链接:https://gitee.com/huangxue1111/codes/12rfs3ztj5ga8ymce7qi910
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#define IN 1
#define OUT 0
void main() {
FILE *fp;
int length;
fp = fopen("wang.txt", "r");//打开要计数的文件
if (fp == NULL)
{
printf("can not open file");
exit(0);
}
fseek(fp, 00, SEEK_END);
length = ftell(fp);
printf("%d\n", length);//确定所要查找的文件中总字符数长度
rewind(fp);
char str[100000], c;
fread(str, sizeof(char), length, fp);//从文件中读取所有的字符到str序列
int i, num1 = 0, num2 = 0, num3, num4=0, word = OUT;
for (i = 0; (c = str[i]) != '\0'; i++)
{
if (c == ' ')//判断字符中单词数
{
num2++;
word = OUT;
}
else
{
if (word == OUT)
{
word = IN;
num1++;
}
}
if ((c = str[i]) == '\n')
{
num4++;
}
}
num3 = length - num2-num4*2;//字符数
num4++;//行数
fclose(fp);
printf("空格数为%d\n", num2);
printf("单词数为%d\n行数为%d\n字符数为%d\n", num1, num4, num3);
system("pause");
}
该程序主要代码做了相关注解。WC程序,程序流程:选txt文件——读取字符数加入一个数组——for循环计数
字符转移到数组主要分成两个部分:
第一部分先确定我们文件中的数据的长度,利用fseek函数判断指针;
第二部分利用数据长度把所有的字符一次性全部读入到str数组中,利用fread函数
判断行数利用的是for循环挨个进行字符的判断,判断数组中的\n个数,然后根据\n的个数确定行数,用num4表示
空格数的判断也是利用for循环确定字符中共有多少个空格字符,用num2表示
单词数的个数是利用两个空格之间为一个单词的算法来确定的,具体算法即for循环中第一个if语句,用num1表示
字符数的判断则可利用总字符数,行数,还有空格数通过推导得出num3=length-num2-num4*2
这里以wang.txt为例进行演示,共三组测试数据:
第一组
第二组:
第三组:
三组测试数据如上。
第一个博客,激动。
参考文献:https://bbs.csdn.net/topics/390951688?page=1