词频统计 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中文词频统计,热词统计,简要分析(含上手源码)

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高考英语词频统计

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语言实现统计字母的使用频率

《统计字母的使用频率》实验报告一、问题描述:为统计英文字母的使用频率,输入一个不包括空格的由英文字母组成的字符串,长度不超过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语言来统计文件中单词的个数/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代码

该代码在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语言中实现统计数字字符中各个数字出现的次数。
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语言源文件中各关键词出现的频度

#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;}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;
}。