c语言字符串单词个数统计,c语言程序实现单词个数统计

c语言实现读取文件识别单词个数,如果不存在自动创建名字,统计个数后可追加,追加内容#作为追加结束同时会统计个数并打印,如果不继续则可中断本次统计"^"作为结束。

#include

#include

#include //为isspace()提供函数原型

//断言类库文件

#include

//初始化最大可读入字符数

#define LINE_MAX_CHAR 80

//自定义bool类型

#define bool int

#define true 1

#define false 0

//统计文件中单词个数的函数

int countNumber(char *filename) {

//声明文件句柄

FILE *fp ;

fp = fopen(filename,"r");

//断言

assert(fp);

//定义字符变量

char buf[LINE_MAX_CHAR];

//定义个数变量

int numwords = 0;

//定义是否在单词内

bool inword = false;

//定义读入字符变量

char c;

//打印文件标题双换行

printf("This file content : \r\n\r\n");

do {

//通过句柄获取字符

c = fgetc(fp);

//讲读入的字符进行打印,分行输出用户输入的各行字符;

printf("%c",c);

//如果不是空格并且不在单词内并且为英文字符的情况下进行计数,并且设置inword变量为true同时进行字数进行加1操作

if (!isspace(c) && !inword && !( c<64 || c>123 ||(c>91 && c<96) ) ) {

inword = true;

numwords++;

//printf("%d",numwords);

}

//如果为空字符串并且在单词内则标示到达了单词的尾部,同时设置变量为false,进行下一个单词的计数。

if (isspace(c) && inword) {

inword = false;//到达单词的尾部

}

} while(c!=EOF);//当读取的字符不等于EOF文件结束符号时进行继续读入,否则结束。

fclose(fp);

return numwords;

}

int main()

{

//初始化文件句柄,打开可度文件

FILE *fp ;

char ch,flag;

int numwords =0;

char *filename="./test1.txt";

do{

if ((fp = fopen(filename,"a+")) == NULL) {

printf("file cannot be created");

return -1;

}

assert(fp);

//统计当前文件内单词个数

numwords = countNumber(filename);

//打印换行

printf("\r\n\r\n");

//打印单词个数

printf("current total words number : %d\r\n\n",numwords);

printf("insert string to the disk file or not (# means is stop to insert words)\r\n");

//获取命令行输入字符进行文件写入

ch = getchar();

while (ch!='#') {

fputc(ch,fp);

ch=getchar();

}

fclose(fp);

putchar(10);//显示完全字符后进行换行

numwords = countNumber(filename);

//打印换行

printf("\r\n\r\n");

//打印单词个数

printf("total words number : %d\r\n\n",numwords);

printf(" ^ stop all operate insert \r\n");

scanf("%s",&flag);

} while(flag != '^' );

printf("it's over\r\n");

//返回0

return 0;

}

经过多次调试,终于达成前面的要求!

记录一下

你可能感兴趣的:(c语言字符串单词个数统计)