C Linux 下简单实现单词统计

2024-08-27 02:32

本文主要是介绍C Linux 下简单实现单词统计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

/*

功能实现:

从文本文档里读取英文单词,可能含有中文字符,

实现英文单词,中文字符的数目统计

 

Author :贺荣伟

creat Time: 16:01 2015/7/10 星期五

 

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>const int str_len=1010;
char str[str_len];
bool vis[str_len];typedef long long LL;
typedef unsigned long long LLU;int word_count,hanzi_count;void is_word();
void is_hanzi();/*//fgets 方法:char *fgets(char *string, int n, FILE *stream)从文件stream中读取n-1个字符/一行(若一行不满n-1个),string接收字符串如果n <= 0,返回NULL如果n == 1,返回" ",也就是一个空串如果成功,返回值等于string, 也就是获得字符串的首地址//如果出错,或者读到FILE的结尾,返回NULL.FILE *textfile=fopen("text.txt","r");///打开一个文件while(fgets(str,str_len,textfile)!=NULL){str[strlen(str)-1]='\0';printf("%s \n",str);printf("the text size is %d\n",strlen(str));}fclose(textfile);
*/void is_word()
{char ch;bool flag=0;int word_count=0,length=0;FILE *fp=fopen("text.txt","r");       / *打开文件 */while((fp==NULL))                /*打开失败 */{puts("text.txt open failure");exit(0);}while(fgets(str,str_len,fp)!=NULL) /*fgets 的定向输入,获取输入流的长度 */{length=strlen(str);}fclose(fp);for(int i=0; i<length; ++i)       /*判断单词 */{if(isalpha(str[i])&&flag==0){word_count++;flag=1;}if(!isalpha(str[i])){flag=0;}}/*while(!feof(fp)){ch=fgetc(fp);///if(isalpha(ch))if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z'){flag==0;}else if((flag==0)&&(ch!='-'&&ch!='/'&&ch!='\'')){word_count++;flag=1;}}fclose(fp);*/printf("单词个数为: %d 个\n",word_count);
}void is_hanzi()
{int ch,hanzi_count=0;FILE *fp=fopen("text.txt","r"); /*打开文件 */while((fp==NULL)){puts("text.txt open failure"); /*打开失败 */exit(0);}while(!feof(fp)){ch=fgetc(fp);///ASCII 最大127  /*判断汉字 */if(ch>127) {fgetc(fp);hanzi_count++;}}fclose(fp);printf("中文字符为: %d 个\n",hanzi_count);
}
int main()
{is_word();  /*调用 is_word() 函数*/is_hanzi(); /*调用 is_hanzi() 函数*/return 0;
}

测试:

 

 

Linux系统命令行统计文本单词个数及出现频率:

参数:wc  -w,  text.txt
打印单词数(print the word counts)

测试:

文本内容:

We are two boy

结果 4

统计单词出现频率:

这个刚学shell,有些不懂,查找书籍资料和网上资源,知道是这样这样写:

命令行:

Cat text.txt |tr -cs "[a-z][A-Z]" "[\012*]"|tr A-Z a-z|sort|uniq -c|sort -k1nr -k2|head -10

简单分析:cat text.txt:表示创建一个文件。

          |:表示重定向,即把上一个命令的结果传递给下一个命令。

          tr 命令:tr是transform的缩写,该命令是著名的流处理命令sed的简化版,也是用来对文档进行转换的。

          tr -cs “[a-z][A-Z]" "\n"  -c表示取“[a-z][A-Z]"的补集(complement),-s 表示把连续的匹配压缩成一个”\012“,*号表示将集合2中的字符补全,与集合1的字符长度一致,所以整个命令就是把除了字母外的其他字符一律压缩成换行符,如果有连续的匹配,则只转换成一个换行符。

tr A-Z a-z 把大写统一转换成小写。

sort 排序 按字母顺序

uniq 去重 该命令必须对排序好的文档进行,-c 表示打印出字母的重复次数

然后再次 sort ,这次sort比较复杂,因为在uniq命令后 输出结果已经变成了 如下形式:

n word (单词的重复次数+空格+单词)

所以 -k1nr表示对第一列(-k1)的数字形式(-n)的变量进行逆序(-r 从大到小)排列 , -k2表示在前面的排序基础上对重复次数一致的单词进行按字母顺序的排列。

最后是head -n$1,表示只显示结果的前$1行。

文本内容:

We are to boy

结果:

1 are

1 boy

1 to

1 we(均出现一次)

这篇关于C Linux 下简单实现单词统计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1110381

相关文章

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

java父子线程之间实现共享传递数据

《java父子线程之间实现共享传递数据》本文介绍了Java中父子线程间共享传递数据的几种方法,包括ThreadLocal变量、并发集合和内存队列或消息队列,并提醒注意并发安全问题... 目录通过 ThreadLocal 变量共享数据通过并发集合共享数据通过内存队列或消息队列共享数据注意并发安全问题总结在 J

SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤

《SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤》本文主要介绍了SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤,文中通过示例代码介绍的非常详... 目录 目标 步骤 1:确保 ProxySQL 和 mysql 主从同步已正确配置ProxySQL 的

JS 实现复制到剪贴板的几种方式小结

《JS实现复制到剪贴板的几种方式小结》本文主要介绍了JS实现复制到剪贴板的几种方式小结,包括ClipboardAPI和document.execCommand这两种方法,具有一定的参考价值,感兴趣的... 目录一、Clipboard API相关属性方法二、document.execCommand优点:缺点: