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

相关文章

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

windos server2022里的DFS配置的实现

《windosserver2022里的DFS配置的实现》DFS是WindowsServer操作系统提供的一种功能,用于在多台服务器上集中管理共享文件夹和文件的分布式存储解决方案,本文就来介绍一下wi... 目录什么是DFS?优势:应用场景:DFS配置步骤什么是DFS?DFS指的是分布式文件系统(Distr

NFS实现多服务器文件的共享的方法步骤

《NFS实现多服务器文件的共享的方法步骤》NFS允许网络中的计算机之间共享资源,客户端可以透明地读写远端NFS服务器上的文件,本文就来介绍一下NFS实现多服务器文件的共享的方法步骤,感兴趣的可以了解一... 目录一、简介二、部署1、准备1、服务端和客户端:安装nfs-utils2、服务端:创建共享目录3、服

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

Python实现高效地读写大型文件

《Python实现高效地读写大型文件》Python如何读写的是大型文件,有没有什么方法来提高效率呢,这篇文章就来和大家聊聊如何在Python中高效地读写大型文件,需要的可以了解下... 目录一、逐行读取大型文件二、分块读取大型文件三、使用 mmap 模块进行内存映射文件操作(适用于大文件)四、使用 pand

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

Python xmltodict实现简化XML数据处理

《Pythonxmltodict实现简化XML数据处理》Python社区为提供了xmltodict库,它专为简化XML与Python数据结构的转换而设计,本文主要来为大家介绍一下如何使用xmltod... 目录一、引言二、XMLtodict介绍设计理念适用场景三、功能参数与属性1、parse函数2、unpa

C#实现获得某个枚举的所有名称

《C#实现获得某个枚举的所有名称》这篇文章主要为大家详细介绍了C#如何实现获得某个枚举的所有名称,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... C#中获得某个枚举的所有名称using System;using System.Collections.Generic;usi