词频统计 C代码

合集下载

c语言:计算输入字符个数及字母出现的频率思路

c语言:计算输入字符个数及字母出现的频率思路

c语言:计算输入字符个数及字母出现的频率思路c语言:计算输入字符个数及字母出现的频率思路近日再看《c语言程序设计第二版》,做了一下上面的习题。

1.编写程序,打印出输入中单词长度的直方图。

2.编写程序,打印出输入中各个字符出现频率的直方图。

先来说第一题,没输入一个一个单词后,你就要出入一个空格,接着输入一个单词,在输入一个空格,依此循环输入。

当一个句子输入完了,就需要隔行另起一段。

例:i am a studen第1个单词长度为1第2个单词长度为2第3个单词长度为1第4个单词长度为6但是,当每输入完一个单词的时候需要用空格隔开,然后在输入,编写的过程,要判断,详情看代码。

通过维基百科查询,目前最长单词的长度为30,有个很长的大概是225多个字母,不过我向我们一般也用不着它。

将最长字母长度MAXWORD设置为30,如果你喜欢你可以设置成任意长度建立单词长度数组word length,简称为wl[].数组最大为wl[MAXWORLD]将单词长度数组中的值全部值为0int i;for(i = 1; i <= MAXWORD; i++)wl[i] = 0;为什么要这样做?我遇到这个题目的时候是这么想的,每输入一个单词,将其长度放入数组中保存着。

于是,我就写呀写呀,写了好长时间。

后来我就没写了,翻了下原来的笔记,看看了,原来可以这么想,一下子事情变得简单多了。

我将长度为1~30的字母,分别归类长度为1的、长度为2、长度为3等等,然后将其放入数组,让它们保存着。

例:internet 这个单词长度为8,我就将其放入数组wl[8],如果还有相同长度放入wl[8]中,wl[8]的值就得+1啦。

所以该写成++wl[8]。

现在思路明白了,我们可以这么写了。

#include <stdio.h>#define MAXWORD 30 //单词的最大长度#define IN 1 //在单词内,即没有遇到空格#define OUT 0 //在单词外,即遇到了空格/*word length ==> wl单词长度简称*/int wl(){int c;int i;int nc;int state; //state为单词的状态:IN或OUT;int overflow; //操过MAXWORD的单词个数int wl[MAXWORD]; //长度为1~30的的字符长度统计state = OUT;nc = 0;overflow = 0;for(i = 1; i < MAXWORD; ++i) wl[i] = 0;while((c = getchar()) != EOF)if(c == ' ' || c == '\n' || c == '\t') {state = OUT;if(nc > 0)if(nc < MAXWORD)++wl[nc];else++overflow;nc = 0;}else if(state == OUT){state = IN;nc = 1;}else++nc;for(i = 1; i < MAXWORD; ++i)printf("长度为:%d的单词个数为:%d : \n\n", i, wl[i]);return 0;}main(){wl();}不擅长写作,文章仅供参考,如有错误请指正。

Python中文词频统计,热词统计,简要分析(含上手源码)

Python中文词频统计,热词统计,简要分析(含上手源码)
ቤተ መጻሕፍቲ ባይዱ
7 words = jieba.lcut_for_search(txt)
8 counts = {}
9 for word in words:
10 if len(word) == 1:
11
continue
12 else:
13
counts[word] = counts.get(word, 0) + 1
14
登录后才能查看或发表评论立即登录或者逛逛博客园首页
Python中 文 词 频 统 计 , 热 词 统 计 , 简 要 分 析 ( 含 上 手 源 码 )
jieba库有三种模式 精确模式、全模式、搜索引擎模式 - 精确模式:把文本精确的切分开,不存在冗余单词 - 全模式:把文本中所有可能的词语都扫描出来,有冗余 - 搜索引擎模式:在精确模式基础上,对长词再次切分
15 items = list(counts.items())
16
17 items.sort(key=lambda x: x[1], reverse=True)
18 # items.sort(reverse = True)
19 for i in range(20):
20 word, count = items[i]
21 print(word, count)
22 # print('{0:<10}{1:>5}'.format(word,count))
应用实例:
代码:
1 import jieba
2
3 file = open('E:/578095023/FileRecv/寒假作业/test.txt', encoding="utf-8")

python高考英语词频统计

python高考英语词频统计

1、解释说明
高考英语词频统计是指对高考英语试卷中的单词进行统计,以了解哪些单词出现的频率较高。

这有助于教师和学生了解高考英语试卷的出题规律,从而更好地备考。

在Python中,我们可以使用collections模块中的Counter类来实现词频统计。

2、使用示例
```python
from collections import Counter
# 假设这是一份高考英语试卷上的单词列表
words = ['apple', 'banana', 'orange', 'apple', 'banana', 'apple']
# 使用Counter类进行词频统计
word_count = Counter(words)
# 输出结果
print(word_count)
```
运行上述代码,将得到如下输出:
```
Counter({'apple': 3, 'banana': 2, 'orange': 1})
```
这意味着在这份试卷上,'apple'出现了3次,'banana'出现了2次,'orange'出现了1次。

3、注意事项
- 在进行词频统计时,需要注意单词的大小写问题。

为了避免因大小写不同而导致的重复统计,可以在统计前将所有单词转换为小写或大写。

- 在处理文本数据时,需要去除标点符号、空格等无关字符,以便更准确地进行词频统计。

可以使用正则表达式或其他字符串处理方法来实现这一点。

c语言实现统计字母的使用频率

c语言实现统计字母的使用频率

《统计字母的使用频率》实验报告一、问题描述:为统计英文字母的使用频率,输入一个不包括空格的由英文字母组成的字符串,长度不超过200个字符。

统计26个英文字母的使用频率,不区分大小写。

最后按使用频率从大到小输出字母(小写字母)和使用频率(出现次数)。

二、程序设计的基本思想,原理和算法描述:定义一个将大写字母转化为小写字母的函数:char alphabet(char y)程序的代码:定义三个数组a[200],b[26],c[26] 并把c[26]赋初值0定义变量x,i,j,k输入英文字符串将大写字母改写成小写字母统计每个字母的个数,存在数组c[26]中将26个字母赋值给b[26]比较字母个数大小,个数多的排到前面按频率大小输出字母和频率结束三、源程序及注释:#include"stdio.h"#include"windows.h"void main(){ char alphabet(char y);//声明alphabet函数char a[200],b[26];//a表示输入的字母,b表示26个字母int c[26]={0};//c代表字母出现的次数char x;int i,j,k;printf("请输入一个不包括空格的英文字符串:\n");scanf("%s",&a);//输入字符;gets(a),可以有空格for(i=0;i<200;i++)//将大写字母改成小写字母a[i]=alphabet(a[i]);for(j=0,x='a';j<26;j++,x++)//统计每个字母个数for(i=0;i<200;i++)if(a[i]==x) c[j]++;for(k=0;k<26;k++)//将26个字母赋值给bb[k]='a'+k;for(i=0;i<25;i++)//比较字母个数大小,个数多的排到前面for(j=25;j>i;j--)if(c[j]>c[j-1]){k=c[j-1];c[j-1]=c[j];c[j]=k;x=b[j-1];b[j-1]=b[j];b[j]=x;}system("cls");printf("以下是输出结果:\n");for(k=0;k<26;k++)//按频率大小输出字母和频率printf("字母%c使用的次数是:%d\n",b[k],c[k]);system("pause");}char alphabet(char y)//定义一个函数,将大写字母转化为小写字母{if(y>='A'&&y<='Z')y=y+32;return (y);}四、运行输出结果:五、调试分析本次实习作业比较容易,主要是将大写字母转化为小写字母和排序问题。

用C语言来统计文件中单词的个数

用C语言来统计文件中单词的个数

用C语言来统计文件中单词的个数/cpp/html/2817.html2015文本检索是软件最常用的一个功能,用C语言写一段程序,统计某个文件中单词的个数。

提示:单词是以空格为分隔的。

文本检索是软件最常用的一个功能,下面的代码将教你如果使用C语言统计单词的个数。

代码实现:1.#include <stdlib.h>2.#include <stdio.h>3.#include <string.h>4.#include <conio.h>5.6.// argc: 统计运行程序时命令行参数的个数7.// *argv[]: 储存每个参数的字符串指针,每一个元素对应一个参数8.int main (int argc,char *argv[])9.{10.int ch,bian=0,count=0;11.char find[50],temp[1000];12.FILE *pt; //文件指针13.14.// 判断是否输入文件15.if (argc != 2){16.printf("请使用格式: %s 文件名",argv[0]);17.exit(1); //非正常退出18.}19.20.// 判断能否成功打开文件21.if ((pt = fopen(argv[1],"r"))== NULL){ //将argv[1]赋值给指针pt22.printf("打开文件 %s 失败",argv[1]);23.exit(1);24.}25.26.printf("请输入要查找的单词:");27.gets(find);28.while((ch=getc(pt))!=EOF){ //EOF 表示文件结束29.if ((ch!=' ')&&(ch!='\n')){30.temp[bian]=ch;31.bian++;32.} else {33.temp[bian]='\0';34.if ((strcmp(find,temp))==0) count++;35.bian=0;36.}37.}38.printf("共在文件%s中查找到字符串\"%s\" %d 个\n",argv[1],find,count);39.40.getch();41.return 0;42.}代码分析上面的程序,需要在 dos 命令行下运行。

统计字符频率C代码

统计字符频率C代码

该代码在VC++6.0编译器下运行,用于统计文本文件中的字符个数…………………..由于制作时间匆忙,很多注释都来不及写了,对于出学者可以慢慢看,代码很简单的,都放在了主函数里,如果有兴趣的话,可以把这些代码放在几个文件里,这样会好看点,加油了!#include<stdio.h>#include<string.h>#define N 200 //定义字符串长度.void main(){void num(char *q,int *w); //函数定义,该函数用于统计字母出现的频率,并且进行按顺序排列。

void low(char *q); //函数定义,该函数用于将字符串中的大些字母转化为小写字母。

char hz[N],*p;int f[26];p=hz;//printf("input figers:\n");gets(p);low(p);num(p,f);}void num(char *q,int a[]){int i,k,j,judge,g;g=strlen(q); //计算用户输入的字符串的实际长度.for(i=0;i<26;i++)a[i]=0;for(i=0;*(q+i)!='\0';i++) // for 语句统计字符频率,大些字母和小写字母归为一类,用一个数组统计。

{if(*(q+i)<=90 && *(q+i)>=65){k=(int)*(q+i);a[k-65]++;}if(*(q+i)<=122 && *(q+i)>=97){k=(int)*(q+i);a[k-97]++;}}//printf("\n字符频率是:\n");for(i=0;i<26;i++) //对字符频率进行排列,并且输出。

{judge=a[0];k=0;for(j=0;j<26;j++){if(judge<a[j]){judge=a[j];k=j;}}a[k]=(-1);printf("%c: %d\t",(65+k),judge); //对已经输出的频率将其数值赋值为-1.}//printf("\n");}void low(char *q) //将大写字母转化为小写字母。

c语言数字字符中各个数字出现的次数

c语言数字字符中各个数字出现的次数

C语言是一种计算机程序设计语言,常用于系统软件、应用软件、驱动程序等的开发。

在C语言中,处理数字字符并统计各个数字出现的次数是一个常见的需求。

本文将介绍如何在C语言中实现统计数字字符中各个数字出现的次数。

1. 问题描述在处理数字字符时,有时需要统计各个数字出现的次数。

在字符串"xxx"中,数字1出现1次,数字2出现1次,数字3出现1次,数字4出现1次,数字5出现1次。

而在字符串"xxx"中,数字1出现2次,数字2出现2次,数字3出现2次,数字4出现2次,数字5出现2次。

2. 解决方法在C语言中,可以通过定义一个长度为10的整型数组,用来统计数字0-9出现的次数。

具体的实现方法如下:```c#include <stdio.h>int m本人n() {char str[] = "xxx";int count[10] = {0};int i = 0;while (str[i] != '\0') {if (str[i] >= '0' str[i] <= '9') {count[str[i] - '0']++;}i++;}for (i = 0; i < 10; i++) {printf("数字d出现了d次\n", i, count[i]);}return 0;}```在上面的代码中,我们使用了一个长度为10的整型数组count来统计数字0-9出现的次数,初始化为0。

然后遍历字符串str,如果遇到数字字符,则将对应count数组的元素加1。

最后遍历count数组,输出各个数字出现的次数。

3. 程序运行结果经过编译和运行上面的代码,可以得到如下结果:```数字0出现了0次数字1出现了2次数字2出现了2次数字3出现了2次数字4出现了0次数字5出现了0次数字6出现了0次数字7出现了0次数字8出现了0次数字9出现了0次```4. 总结本文介绍了在C语言中统计数字字符中各个数字出现的次数的方法,通过定义一个长度为10的整型数组,遍历字符串并对应修改数组元素的方法,可以轻松实现该需求。

统计C语言源文件中各关键词出现的频度

统计C语言源文件中各关键词出现的频度

#include <windows.h>#include <stdio.h>#define MAX_LINELEN 512#define MAX_WORDLEN 64//关键字统计信息结构typedef struct tagKeyInfo{char chKey[MAX_WORDLEN];int nSum;struct tagKeyInfo *pNext;}KeyInfo;//处理输入文件int ProcessInputFile(char* pFileNameIn,KeyInfo* pHeader);//创建关键字链表KeyInfo* InitList(char* keyFileNameIn);//统计关键字信息void ComputKeyInfo(KeyInfo* pHeader,char* pWords);//输出关键字统计信息int PrintKeyInfo(char* pOutFileName,KeyInfo* pHeader);//删除关键字信息链表void DeleteKeyInfo(KeyInfo* pHeader);int main(int argc,char* argv[]){char keyFileNameIn[MAX_PATH]="";char chFileNameIn[MAX_PA TH]="";char chFileNameOut[MAX_PATH]="";KeyInfo* pHeader;//命令行中是否包含文件if(argc!=4){printf("Please input key file name(include full path:)\n");gets(keyFileNameIn);printf("Please input source file name(include full path:)\n");gets(chFileNameIn);printf("Please output target file name(include full path:)\n");gets(chFileNameOut);}else{strcpy(keyFileNameIn,argv[1]);strcpy(chFileNameIn,argv[2]);strcpy(chFileNameOut,argv[3]);}//创建关键字列表pHeader=InitList(keyFileNameIn);//处理输入文件ProcessInputFile(chFileNameIn,pHeader);// 输出关键字统计信息PrintKeyInfo(chFileNameOut,pHeader);// 删除关键字信息链表DeleteKeyInfo(pHeader);return 0;}//创建关键字链表KeyInfo* InitList(char* keyFileNameIn){int nPrePos;int i,j,k;char chBuff[MAX_LINELEN];char chWords[MAX_WORDLEN];KeyInfo* pHeader,*pCurrent,*pNew;FILE* pFileIn;pFileIn = fopen(keyFileNameIn,"rt");if (pFileIn == NULL){printf("Can not open file:%s\n",keyFileNameIn);return 0;}pNew=(KeyInfo*)malloc(sizeof(KeyInfo));if(pNew==NULL){printf("Can not allocate memory!");return NULL;}else{strcpy(pNew->chKey,"auto");pNew->nSum=0;pNew->pNext=NULL;pHeader=pNew;pCurrent=pHeader;}while(!feof(pFileIn))//没有结束标志{memset(chBuff,'\0',MAX_LINELEN);fgets(chBuff,MAX_LINELEN,pFileIn);nPrePos = -1;i = 0;while (chBuff[i] != '\0'){if (isspace(chBuff[i])||chBuff[i]==';'){if (nPrePos == -1){i++;continue;}else{memset(chWords,'\0',MAX_WORDLEN);for(j=nPrePos,k=0;j<i;j++,k++)chWords[k] = chBuff[j];chWords[k] = '\0';pNew = (KeyInfo*)malloc(sizeof(KeyInfo));if (pNew == NULL){printf("Can not allocate memory!");return NULL;}else{strcpy(pNew->chKey,chWords);pNew->nSum = 0;pNew->pNext = NULL;pCurrent->pNext=pNew;pCurrent=pNew;}nPrePos = i;}}else{if (nPrePos == -1 || isspace(chBuff[i-1]))nPrePos = i;}i++;}}fclose(pFileIn);return pHeader;}// 处理输入文件int ProcessInputFile(char* pFileNameIn,KeyInfo *pHeader) {int nPrePos;int i,j,k;char chBuff[MAX_LINELEN];char chWords[MAX_WORDLEN];FILE* pFileIn;pFileIn = fopen(pFileNameIn,"rt");if (pFileIn == NULL){printf("Can not open file:%s\n",pFileNameIn);return 0;}while(!feof(pFileIn))//没有结束标志{memset(chBuff,'\0',MAX_LINELEN);fgets(chBuff,MAX_LINELEN,pFileIn);nPrePos = -1;i = 0;while (chBuff[i] != '\0'){if (isspace(chBuff[i])||chBuff[i]==';'){if (nPrePos == -1){i++;continue;}else{memset(chWords,'\0',MAX_WORDLEN);for(j=nPrePos,k=0;j<i;j++,k++)chWords[k] = chBuff[j];chWords[k] = '\0';ComputKeyInfo(pHeader, chWords);nPrePos = i;}}else{if (nPrePos == -1 || isspace(chBuff[i-1]))nPrePos = i;}i++;}// 文件最后一个单词if (i-1 > nPrePos){memset(chWords,'\0',MAX_WORDLEN);for(j=nPrePos,k=0;j<i;j++,k++)chWords[k] = chBuff[j];chWords[k] = '\0';ComputKeyInfo(pHeader, chWords);}}fclose(pFileIn);return 1;}// 统计关键字信息void ComputKeyInfo(KeyInfo *pHeader, char* pWords){KeyInfo *pCurrent;pCurrent = pHeader;while(pCurrent != NULL){if (strcmp(pCurrent->chKey,pWords)==0){pCurrent->nSum++;break;}pCurrent = pCurrent->pNext;}//pHeader->nSum=pHeader->nSum+pCurrent->nSum会出错}// 输出关键字统计信息int PrintKeyInfo(char *pOutFileName,KeyInfo *pHeader){FILE* fileOut;KeyInfo *pCurrent;fileOut = fopen(pOutFileName,"wt");if (fileOut == NULL){printf("Can not create file:%s\n",pOutFileName);return 0;}printf("文件中关键字信息统计如下:\n");pCurrent = pHeader;while(pCurrent != NULL){printf("%s\t %d\n",pCurrent->chKey,pCurrent->nSum);fprintf(fileOut,"%s\t%d\n",pCurrent->chKey,pCurrent->nSum);pCurrent = pCurrent->pNext;}fclose(fileOut);return 1;}// 删除冠词信息链表void DeleteKeyInfo(KeyInfo *pHeader){KeyInfo *pCurrent;pCurrent = pHeader;while(pCurrent != NULL){pHeader = pCurrent->pNext;free(pCurrent);pCurrent = pHeader;}}。

C语言实现英文文本词频统计

C语言实现英文文本词频统计

C语⾔实现英⽂⽂本词频统计这⼏天写了⼀个基于C语⾔对⽂本词频进⾏统计的程序,开发及调试环境:mac集成开发环境Xcode;测试⽂本,马丁.路德⾦的《I have a dream》原⽂演讲稿。

主要运⾏步骤:1. 打开⽂本把⽂本内容读⼊流中并且开辟相应空间放⼊内存2 .对⽂本内容进⾏处理,去除⼤写字母(转化为⼩写),去除特殊字符3. 基于单链表对词频进⾏统计4. 把统计结果进⾏归并排序5.打印输出全部词频或者频率最⾼的10个单词和其出现次数6.释放所有结点消耗的内存废话不多说,上代码!//// main.c// word_frequency_statistic//// Created by tianling on 14-3-16.// Copyright (c) 2014年 tianling. All rights reserved.// 实现英⽂⽂本的词频统计//#include <stdio.h>#include <stdlib.h>#include <string.h>#define ERROR 1#define OK 0const int WORD_LENGTH = 250;//定义单个单词最⼤长度typedef int status;/***定义存储单词及其出现次数的结构体*/typedef struct Node{char word[WORD_LENGTH];int time;struct Node *next;}wordNode;wordNode *headNode = NULL;//定义链表头指针/***函数声明*/wordNode *wordSearch(char *word,int *num);status wordCount(char *word,int *num);void printCountList(int *num);void PrintFirstTenTimes();void mergeSort(wordNode **head);void FrontBackSplit(wordNode *head,wordNode **pre,wordNode **next);void wordJob(char word[]);wordNode *SortedMerge(wordNode *pre,wordNode *next);void release();status main(int argc,char *argv[]){char temp[WORD_LENGTH];//定义⽤以临时存放单词的数组FILE *file;int count,articleWordNum = 0;//定义统计结点个数的变量int *num = &articleWordNum,choose;/***读取⽂件*/if((file = fopen("/Users/tianling/Documents/Data_Structure/word_frequency_statistic/word_frequency_statistic/article.txt", "r")) == NULL){//这⾥是绝对路径,基于XCode编译器查找⽅便的需求printf("⽂件读取失败!");exit(1);}while((fscanf(file,"%s",temp))!= EOF){wordJob(temp);count = wordCount(temp,num);fclose(file);//关闭⽂件printCountList(num);printf("***********请选择***********\n");printf("*****1. 输出词频最⾼的10个词**\n");printf("*****2. 退出****************\n");scanf("%d",&choose);if(choose == 1){mergeSort(&headNode);PrintFirstTenTimes();}else{release();exit(0);}release();return 0;}/***查找单词所在结点*/wordNode *wordSearch(char *word,int *num){wordNode *node;//声明⼀个新结点if(headNode == NULL){//若头结点为空node = (wordNode*)malloc(sizeof(wordNode));strcpy(node->word, word);//将第⼀个单词赋值给这个新结点node->time = 0;//初始化该单词的出现次数*num+=1;headNode = node;//将头结点指向这个新结点return node;}wordNode *nextNode = headNode;wordNode *preNode = NULL;while(nextNode != NULL && strcmp(nextNode->word, word) != 0){ preNode = nextNode;nextNode = nextNode->next;}//若该单词不存在,则在链表中⽣成新结点if(nextNode == NULL){node = (wordNode*)malloc(sizeof(wordNode));strcpy(node->word, word);node->time = 0;node->next = headNode->next;headNode->next = node;*num+=1;return node;}elsereturn nextNode;}/***词频统计*/status wordCount(char *word,int *num){wordNode *tmpNode = NULL;tmpNode = wordSearch(word,num);if(tmpNode == NULL){return ERROR;}tmpNode->time++;return 0;}**打印所有词频*/void printCountList(int *num){if(headNode == NULL){printf("该⽂件⽆内容!");}else{wordNode *preNode = headNode;printf("总词量 %d \n",*num);while(preNode != NULL){printf("%s 出现次数 %d\n",preNode->word,preNode->time);preNode = preNode->next;}}}/***打印词频最⾼的10个词*/void PrintFirstTenTimes(){if(headNode == NULL){printf("该⽂件⽆内容!");}else{wordNode *preNode = headNode;int i = 0;printf("出现次数最多的10个词如下: \n");while (preNode != NULL && i<=10) {printf("%s 出现次数 %d\n",preNode->word,preNode->time);preNode = preNode->next;i++;}}}/***对词频统计结果进⾏归并排序*/void mergeSort(wordNode **headnode){wordNode *pre,*next,*head;head = *headnode;//若链表长度为0或1则停⽌排序if(head == NULL || head->next == NULL){return;}FrontBackSplit(head,&pre,&next);mergeSort(&pre);mergeSort(&next);*headnode = SortedMerge(pre,next);}/***将链表进⾏分组*/void FrontBackSplit(wordNode *source,wordNode **pre,wordNode **next){ wordNode *fast;wordNode *slow;if(source == NULL || source->next == NULL){*pre = source;*next = NULL;}else{slow = source;fast = source->next;while(fast != NULL){fast = fast->next;if(fast != NULL){}}*pre = source;*next = slow->next;slow->next = NULL;}}/***根据排序结果更换头结点*/wordNode *SortedMerge(wordNode *pre,wordNode *next){wordNode *result = NULL;if(pre == NULL)return next;else if(next == NULL)return pre;if(pre->time >= next->time){result = pre;result->next = SortedMerge(pre->next,next);}else{result = next;result->next = SortedMerge(pre,next->next);}return result;}/***处理⼤写字母及特殊字符*/void wordJob(char word[]){int i,k;char *specialChar = ",.;:'?!><+=|*&^%$#@\"";//定义特殊字符集 for(i = 0;i<strlen(word);i++){//筛选并将字符串中的⼤写字母转化为⼩写字母if(word[i]>='A'&& word[i]<='Z'){word[i] += 32;}//筛选并去除字符串中的特殊字符for(k = 0;k<strlen(specialChar);k++){if(word[i] == specialChar[k]){while(i<strlen(word)){word[i] = word[i+1];i++;}}}}}/***释放所有结点内存*/void release(){if(headNode == NULL)return;wordNode *pre = headNode;while(pre != NULL){headNode = pre->next;free(pre);pre = headNode;}}调试结果:(Xcode环境)以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

C语言算法查找字符串在文中出现的次数

C语言算法查找字符串在文中出现的次数
for (int i = 0; i <= textLen - patternLen; i++) { int j; for (j = 0; j < patternLen; j++) { if (text[i + j] != pattern[j]) { break; } } if (j == patternLen) { count++; }
return 0; }
在上述示例中, countOccurrenctern 表 示要查找的字符串。函数使用两个嵌套的循环,外部循环遍历文本字符串,内部循环用于比 较文本中的字符与模式字符串中的字符是否匹配。如果匹配成功,计数器 count 增加。最 后,函数返回匹配次数。 在 main 函数中,我们定义了一个文本字符串和要查找的模式字符串,并调用 countOccurrences 函数来获取模式字符串在文本中出现的次数,并将结果打印出来。
要在 C 语言中实现查找字符串在文本中出现的次数,可以使用字符串匹配算法,如 KMP 算 法或 Boyer-Moore 算法。以下是使用简单的循环遍历实现的示例代码:
c 复制代码
#include <stdio.h> #include <string.h>
int countOccurrences(const char* text, const char* pattern) { int count = 0; int textLen = strlen(text); int patternLen = strlen(pattern);
请注意,这只是一种简单的实现方式,对于大规模文本和复杂的模式匹配需求,可能需要使 用更高效的算法和数据结构来提高性能。

python哈姆雷特词频统计代码

python哈姆雷特词频统计代码

Python哈姆雷特词频统计代码一、介绍1.1 Python编程语言Python是一种面向对象的高级编程语言,它具有简单易学、功能强大、代码可读性高等特点,广泛应用于数据分析、人工智能、网络编程等领域。

1.2 哈姆雷特哈姆雷特是莎士比亚的代表作之一,被誉为世界文学史上最伟大的剧作之一,其对人性、权力、复仇等主题的探讨至今仍具有深远的影响。

二、词频统计代码2.1 导入模块在Python中,我们可以使用collections模块中的Counter类来实现对文本中词语的词频统计。

我们需要导入collections模块: ```pythonimport collections```2.2 读取文本接下来,我们需要读取哈姆雷特的文本内容并对其进行处理。

我们可以使用Python的文件操作功能来实现这一步骤:```pythonwith open('hamlet.txt', 'r', encoding='utf-8') as f:text = f.read()```2.3 分词在进行词频统计之前,我们需要对文本进行分词处理,将文本转换成一个个的词语。

Python中有多种分词工具可以选择,比如jieba分词库:```pythonimport jiebawords = jieba.lcut(text)```2.4 统计词频有了分词后的词语列表,我们就可以利用Counter类来进行词频统计了:```pythonword_count = collections.Counter(words)```三、结果输出3.1 打印词频统计结果经过以上步骤,我们已经得到了哈姆雷特文本中的词频统计结果。

接下来,我们可以将结果进行输出,并对其进行展示:```pythonfor word, count in word_count.mostmon(10):print(word, count)```3.2 结果分析通过词频统计结果,我们可以得知在哈姆雷特中哪些词语出现频率较高,从而对文本内容有个初步的了解。

利用hash技术统计单词频率

利用hash技术统计单词频率
const int MAXLEN=10; //关键字长度
const int HASHLEN=41; //哈希表长度
int cont=0; //统计哈希表中的关键字个数
void jiemian();
void Show(int key);
void Select(int choice);
int Read(char *filename);
cout<<"\t================================================================="<<endl<<endl;
jiemian();
Select(Input());
}
void jiemian()
{
cout<<endl;
{ //线性探查法顺序查找哈希表中是否已存在关键字
tem++; //统计冲突次数
if(strcmp(HS[find].keyword,keyword)==0){
HS[find].con=tem;
return find; }
}
for(find=0;find<key;find++)
{
key=GetKey(keyword); //计算哈希值
if(strlen(HS[key].keyword)>0) //通过计算字符串s的(unsigned int型)长度
int con; //冲突次数
};
HASH HS[HASHLEN];
void main()
{
ResetHX(); //先清空哈希表

python词频统计代码

python词频统计代码

python词频统计代码
Python词频统计代码是一段用于统计文本中单词出现的次数的代码,它可以帮助我们更好地理解文本,分析文章结构和文本主题等。

具体实现步骤如下:
1. 创建一个字典(dict)对象,用来存储各单词及其出现的次数。

2. 遍历文本中的每个单词,如果字典中不存在该单词,则将其加入字典,并将其出现次数设置为1;如果已存在,则将其出现次数加1。

3. 按单词出现次数从大到小进行排序,得到一个列表。

4. 根据需要,可以将统计结果存储成图形、文件等格式,以方便使用。

flink词频统计代码

flink词频统计代码

在Apache Flink中实现词频统计的代码可能如下:首先,你需要创建输入源,在这个例子中,我们将直接使用字符串数组。

然后,我们会使用flatMap函数来分割字符串为单词,并使用map函数来把每个单词转化为<String, Integer>键值对。

最后,我们会使用reduce函数来把所有的<String, Integer>键值对合并,得到每个单词的总数。

这是一个简单的实现示例:import mon.functions.FlatMapFunction;import mon.functions.MapFunction;import org.apache.flink.api.java.tuple.Tuple2;import org.apache.flink.streaming.api.datastream.DataStream;import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;import org.apache.flink.util.Collector;public class WordCount {public static void main(String[] args)throws Exception {final StreamExecutionEnvironment env =StreamExecutionEnvironment.getExecutionEnvironment();String[] text = {"hello", "world", "hello", "flink", "word", "count", "flink"};DataStream<String> textStream = env.fromElements(text);DataStream<Tuple2<String, Integer>> wordCount = textStream.flatMap(new Tokenizer()) // 分词并转为<String, Integer>键值对.map(new Converter()) // 转为<String, Integer>键值对并计数.keyBy(0) // 按单词分组.reduce((word1, word2) -> new Tuple2<>(word1.f0, word1.f1 + word2.f1)); // 计数累加wordCount.print(); // 打印结果env.execute(); // 执行任务}}其中,Tokenizer和Converter这两个函数的实现可能如下:public class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> {@Overridepublic void flatMap(String value, Collector<Tuple2<String, Integer>> out) {// 分词并将每个单词转为<String, Integer>键值对for (String word : value.split("\\s+")) {out.collect(new Tuple2<>(word, 1));}}}public class Converter implements MapFunction<String, Tuple2<String, Integer>> { @Overridepublic Tuple2<String, Integer> map(String value) {// 转为<String, Integer>键值对并计数为1return new Tuple2<>(value, 1);}}。

数字经济政策词频统计代码

数字经济政策词频统计代码

数字经济政策词频统计代码
好的,下面是一个基于python语言的数字经济政策词频统计代码示例,代码实现了对文本中数字经济政策相关词汇的词频统计,具体步骤如下:
```python
# 导入所需库
import pandas as pd
from collections import Counter
# 读取文本数据
df = pd.read_csv('data.csv')
# 统计词频
word_counts = Counter(df['text'])
# 输出结果
print(word_counts)
```
在这个示例中,我们首先导入了`pandas`和`collections`库。

然后,我们使用`pd.read_csv()`函数读取了名为`data.csv`的数据文件。

接下来,我们使用`Counter()`函数对数据文件中的文本进行词频统计,并将结果存储在`word_counts`变量中。

最后,我们使用`print()`函数输出了词频统计结果。

请注意,你需要根据实际情况修改代码中的数据文件路径和输出结果的方式。

此外,你还可以根据需要对代码进行修改和扩展,以满足你的特定需求。

批处理统计词频实现代码(统计重复行的数量每行重复出现的次数)

批处理统计词频实现代码(统计重复行的数量每行重复出现的次数)
一叶障目
一往无前
一往无前
一往无前
实现如下:
一丘之貉 1
一丝不挂 1
一丝不苟 1
一事无成 1
一亲对老 1
一分身又 1
一叶知秋 2一叶障目ຫໍສະໝຸດ 2一往无前 3解决代码
1
2
3
4
@echooff & setlocal enabledelayedexpansion
for /f"delims="%%a in ('type "测试.txt"') doset/a"#%%a#+=1"
for /f"tokens=1* delims=#="%%a in ('set #') doecho%%a %%b
pause
win7以上系统
1
2
powershell-c"gc '测试.txt'|group $_|%%{$_.name+' '+$_.count}"
pause
一丘之貉一丝不挂一丝不苟一事无成一亲对老一分身又一叶知秋一叶知秋一叶障目一叶障目一往无前一往无前一往无前
批处理统计词频实现代码(统计重复行的数量每行重复出现的次数)
请问批处理可以统计词频吗?
4字一行,只统计4字词组出现的频率。
如:
一丘之貉
一丝不挂
一丝不苟
一事无成
一亲对老
一分身又
一叶知秋
一叶知秋
一叶障目

VS2010简单实现 C++ 宋词词频统计 实验报告 附源代码

VS2010简单实现 C++ 宋词词频统计 实验报告 附源代码

实验一词频统计一,模型方法本词频统计代码的主要方法如下:(1)本程序的开发环境是VS2010,使用的编程语言是C++。

(2)不采用char*类型的字符串而采用C++标准程序库中的string类,是因为它和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,它集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。

因此我采用字符串作为数据处理类型,在程序中主要用来存储每次从文件流中读取的一段字符串swhole,临时保存单个词语的sdanci,保存所有不重复单词的sdanciwh,保存抽取出的高频单词的spaixu。

(3)使用string类的函数substr(nstart,nlength)来从字符串中截取指定长度字符串。

(4)使用string类的函数find(s)来查找指定字符串。

(5)使用长整型数组count[alength]存储每个单词对应的频度(6)词频统计思想:每次从语料中读取一段到swhole中,从头开始,首先判断将要取的四个字节(即两个中文字符)是否包含中文标点,若全是汉字则截取这四个字节存入sdanci,在sdanciwh中查找是否存在该单词,如果已存在,就将频度数组count[]相应位加1,如果不存在就将该词添加到sdanciwh,同时将总单词数ndanci+1。

(7)本程序采用快速排序算法进行排序,关于针对单词和频度同时进行排序的技巧详见第三部分系统设计。

(8)利用一个变量来实现系统功能的转换,如定义整型变量dancil来规定程序统计的是单字,双字,或是三字的词语。

二,系统设计系统详细的设计流程主要分为两部分,一是读取文本文件并进行单词频度统计。

二是对统计到的单词频度进行处理,筛选出高频词汇并输出到文本中。

(一)单词频度统计的具体流程:(1)系统初始化:定义各种变量类型,分为全局变量和局部变量,设定程序的文件输入输出流并初始化。

全局变量主要用来设定可以控制程序功能和执行程度的变量。

C++回顾统计词频问题--vector、map、hash_map(三种方式时间比较)

C++回顾统计词频问题--vector、map、hash_map(三种方式时间比较)

C++回顾统计词频问题--vector、map、hash_map(三种⽅式时间⽐较)本博⽂我们通过三个程序⽐较统计词频问题的时间复杂度问题(末尾有⽤时及其分析);问题描述;1)、找⼀篇⽂章,将所有单词输⼊⾄程序;(The Bible Holy为例)2)、统计出每个单词的数量,即词频问题;3)、增加停⽤词功能;(遇到此类词,直接略过)(⽹上搜)4)、分别统计出读取⽂件并计算词频时间、排序所⽤时间;5)、⽤类实现各函数(处统计时间的函数除外)。

vector、map、hash_map 都要处理字符串的去除标点符号、将⼤写字母转换成⼩写字母、不对数字进⾏统计问题。

因此,我们可以将处理这些函数进⾏封装。

StringUtil.h1 #ifndef STRING_UTIL_H_2#define STRING_UTIL_H_34 #include <string>56namespace stringutil7 {8void erasePunct(std::string &s);9void stringToLower(std::string &s);10bool isAllDigit(const std::string &s);11 }1213#endif /* STRING_UTIL_H_ */StringUtil.cpp1 #include "StringUtil.h"2 #include <ctype.h>34using namespace std;56namespace stringutil7 {89void erasePunct(string &s)10 {11string::iterator it = s.begin();12while(it != s.end())13 {14if(ispunct(*it))15 it = s.erase(it);16else17 ++it;18 }19 }20void stringToLower(string &s)21 {22for(string::iterator it = s.begin();23 it != s.end();24 ++it)25 {26if(isupper(*it))27 *it = tolower(*it);28 }29 }3031bool isAllDigit(const std::string &s)32 {33for(string::const_iterator it = s.begin();34 it != s.end();35 ++it)36 {37if(!isdigit(*it))38return false;39 }4041return true;42 }4344 }⼀、采⽤vector、pair;采⽤的数据结构:1)、vector<string> stopList⽤于存放停⽤词;2)、vector<pair<string, int> > words ⽤于存放除禁⽤词之外的其他The Bible Holy 的单词;思路:1)、⽤ReadStopFile函数读取停⽤词到 stopList中;2)、⽤ReadWordFile函数读取The Bible Holy到 words中;在我们读取的过程中⾸先要去除标点符号、将word转化为⼩写、跳过数字;3)、然后判断该单词是否在 stoplist 中,若不在,最后添加单词⾄ words中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

词频统计排序
统计英文文献中的词频,并排序
作业单词统计部分采用字典树的方法将单词分类并统计,然后采用字典树的遍历将字典树统计的字符按顺序拼接并将词频读出统一存入数组中,最后采用冒泡排序的方法将数组中的词频按从小到大的顺序排列并输出到文件中。

源代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 27//26个字母和'
//字典树的结构体定义
typedef struct Word
{
Word *next[MAX];//数组下标0-25代表小写字母,26'
int num;
};
//结构体定义:单词和对应频率
typedef struct tlist
{
char word[200];
int time;
};
struct tlist list[3000000];
Word *root;
char str[200]="";
char tempword[1000];
int size=0;
//新建单词的函数
void createWord(char *str)
{
int len = strlen(str), id;
Word *p = root, *q;
for(int i = 0; i < len; i ++)//遍历单词判断当前字符是否为字母或'
{
if(str[i] >= 'a' && str[i] <= 'z')
id = str[i] - 'a';
if(str[i] >= 'A' && str[i] <= 'Z')
id = str[i] - 'A';
if(str[i] == '\'')
id = 26;
if(p->next[id] == NULL)//若已到达链表结尾,开辟新的结构体存入字母
{
q = (Word *)malloc(sizeof(Word));
for(int j = 0; j < MAX; j ++)
{q->num=0;q->next[j] = NULL;}
p->next[id] = q;
p = p->next[id];
}
else//若未到达链表结尾,指针指向下一个
{
p = p->next[id];
}
}
p->num++;
}
//读单词的函数
void readWord(Word *p,int len)
{
int i;
for(i=0;i<27;i++)
{
if(p->next[i]!=NULL)
{
if (i==26)
{str[len+1]='\0';str[len]='\'';len++;}
else
{
str[len]='a'+i;
len++;
}
readWord((Word*)p->next[i],len);
len--;
}
}
if(p->num!=0)
{
str[len]='\0' ;
strcpy(list[size].word,str); //如果遇到单词结束标志,将str存入
list[size].word
list[size].time=p->num;
size++;
}
}
//主程序
int main()
{
root=(Word*)malloc(sizeof(Word));
int i,j;
for (i=0;i<27;i++) root->next[i]=NULL;
FILE *fp;
char x;
int len=0;
fp=fopen("text.txt","r");
while((x=fgetc(fp))!=EOF) //从txt文档中读入
{
if ((x>='A'&&x<='Z')||(x>='a'&&x<='z')||(x=='\''&&len!=0))
{tempword[len]=x;len++;}
else {tempword[len]='\0';
createWord(tempword);
len=0;
}
}
tempword[len]='\0';
createWord(tempword);
len=0;
fclose(fp);
readWord(root,0);
//比较频率大小冒泡排序
struct tlist temp;
for(i=0;i<size-1;i++)
for(j=i+1;j<size;j++)
if(list[i].time>list[j].time||(list[i].time==list[j].time&&strcmp(list[i].word,list[j].word)>0)) {
temp.time=list[i].time;
list[i].time=list[j].time;
list[j].time=temp.time;
strcpy(temp.word,list[i].word);
strcpy(list[i].word,list[j].word);
strcpy(list[j].word,temp.word);
}
//将单词和对应频率输出到result.txt中
FILE *fpx;
fpx=fopen("result.txt","w");
for (i=0;i<size;i++) fprintf(fpx,"%s %d\n",list[i].word,list[i].time);
fclose(fpx);
return 0;
}。

相关文档
最新文档