统计一篇文本中空格、单词、句子、非字母字符个数
来源:互联网 发布:网站站内优化 编辑:程序博客网 时间:2024/06/05 02:31
思路:每次从文件中读取一行放到缓存数组中,遍历该数组,单词个数等于空格个数加1,句子个数等于?、!、。个数之和, 用isalpha()统计非字母字符个数,, 要去掉空格, 头文件<time.h>可统计时间, 处理"."时需要去掉小数点
参考资料是刘汝佳的《算法竞赛入门经典》
下面是源代码,不足之处请多指教
#include<stdio.h>#include<string.h>#include<stdbool.h>#include<ctype.h>// 用该头文件的isalpha函数判断非字母字符#include<time.h>// 统计时间char buffchar[1010]; // 每行最多统计不超过1010个字符int countsum[4] = {0, 0 ,0, 0}; // 用来统计int *dealcount(char *filename, int *countsum);// 声明 int main(void){char filename[30];// 读入文件名printf("输入文件名:");scanf("%s" ,filename);// 读文件dealcount(filename, countsum);// 调用统计寒暑 printf("统计结果(个数):\n空格:%d\n单词:%d\n句子:%d\n非字母字符个数:%d", countsum[0], countsum[1], countsum[2] , countsum[3] );printf("\n运行时间%0.2f:", (double)(clock()/CLOCKS_PER_SEC));// 这个方法将键盘输入时间也计算在内,不太好 return 0;} /***下面是统计函数 **/int *dealcount(char *filename, int *countsum){FILE *fp;// 指向文件的指针int len; // 记录长度bool islastBlanck = true;// 上个字符是否是空格char c;// 当前字符 char endflag[] = "?!";// 一句话结束表志 if((fp = fopen(filename ,"r")) == NULL){ perror(filename);// perror()打印上一个函数错误信息 return NULL; }while(fgets(buffchar, 1010, fp) != NULL){// 这里使用fgets()而不是getc()是因为在不同的平台下对文本换行的处理不同,win上是\n和\r,而lunix上屏蔽// \r,s所以用getc反而麻烦.len = strlen(buffchar);for(int i = 0; i < len; i++){c = buffchar[i];if(!isalpha(c)){ // 不是字符 if(c != ' '&&c != '\t' && c != '\n' && c != '\r')// 非字母字符个数将空格、换行去掉 countsum[3]++;if((strchr(endflag, c) != NULL) || ( (buffchar[i+1] == " " || buffchar[i+1]== "\t" || buffchar[i+1] == "\n"
|| buffchar[i+1] == "\r")&& c == '.'))// 一句话结束, strchr()查找某个字符是否在数组中,countsum[2]++;//在的话返回第一次出现位置指针} if(c == ' ' || c == '\t'){countsum[0]++;// 统计空格个数 if(!islastBlanck){// 空格前一个字符不是空格的话就是空格前有个单词 countsum[1]++;islastBlanck = true;}}else if(c != '\n' && c != '\r'){// 忽略换行符 islastBlanck = false;}}if(!islastBlanck){// 如果最后一个字符不是空格 countsum[1]++;}islastBlanck = true;}return countsum;}
0 0
- 统计一篇文本中空格、单词、句子、非字母字符个数
- 用world工具统计文本中的字符、文字、单词、空格的个数
- 统计字符串中字母、数字、空格个数
- 华为OJ--统计输入一串字符中数字,字母,空格及其他字符的个数
- 文本中字符个数统计
- python统计文本中单词个数
- 统计文本中每个单词的个数
- 有一行字符,统计其中的单词个数(单词之间以空格分隔),并将每一个单词的第一个字母改为大写。
- 有一行字符,统计其中的单词个数(单词之间以空格分隔),并将每一个单词的第一个字母改为大写
- Ex7_4编写函数,统计此字符串中字母、数字、空格和其他字符的个数
- 统计一个字符串中数字、字母、空格和其他字符的个数
- 统计字符串中字母,数字,空格以及其他字符的个数。
- C语言-统计一行句子中单词的个数
- 统计字母、空格、数字和其他字符的个数。
- python统计字母、空格、数字等字符个数
- 统计字符串字母,数字,空格和其他字符个数
- 输入一行字符,统计单词个数?(单词:单个字母以上字母的集合)
- 句子中单词的个数
- Apache Spark 内存管理详解
- 【腾讯Bugly干货分享】Android减包 - 减少APK大小
- MIME协议个人笔记--第一篇
- Leetcode 27. Remove Element
- C++概述
- 统计一篇文本中空格、单词、句子、非字母字符个数
- Java语言概述
- 深度链接 Deep Link 开发遇到的坑
- 浏览器兼容问题项目总结(七)IE下未初始化为空,chrome下未初始化生产大量空格
- 重写父类方法、super关键字、调用父类构造器——Java
- 自定义apache日志格式
- qt5 中文乱码
- 前端开发人员守则:如何避免浏览器兼容问题!
- idea打开多个小窗口换行