使用C语言编写一个词频(限英文文章)统计程序

使用C语言编写一个词频(限英文文章)统计程序,第1张

不知道你说的意思是从文件中读出 还是直接从屏幕输入单词 下面是我做的直接从屏幕输入单词的一个程序 你可以看看噢

#include <stdio.h>

#include<string.h>

void main()

{

char str[100][26]

const char str1[5]="1234"const char str2=' '

int num[100]

int m,k,i,n,x,q

int max,max1,max2

double pl

again:

max=0max1=0max2=0

m=0k=0i=0n=0x=0q=0

pl=0

for(m=0 m<100m++)

{num[m]=0

}

for(m=0 m<100m++)

{strcpy( str[m],&str2)

}

printf(" 请输入单词(100个单词以 内 每个不大于25个字符)\n")

printf(" 输入 1234 结束输入 \n")

for(m=0 m<100m++)

{

scanf("%s",str[m])

if( strcmp(str[m],str1 )==0 )

break

}

for(i=0 i<mi++)

{

for(k=0k<mk++)

{

if(strcmp(str[i],str[k] )==0)

{

num[i]++

}

}

}

max=num[0]

while(max>=2)

{

max=num[0]max1=0max2=0

for(n=0n<mn++)

{

if(max<num[n+1])

{

max=num[n+1]

max1=n+1

}

}

num[max1]=0

pl=(double)max/m

printf("%8s",str[max1])

printf(" 出现%8d次",max)

printf(" 位置 第%8d个 ",max1+1)

printf("频率%8lf\n",pl)

for(n=0n<mn++)

{

if(max==num[n+1] &&max1!=n+1)

{max2=n+1

num[max2]=0

printf("%8s",str[max2])

printf(" 出现%8d次",max)

printf(" 位置 第%8d个 ",max2+1)

printf("频率%8lf\n",pl)

}

}

printf(" 。第%d位 。\n\n\n",q+1)

q++

}

printf("重新输入 按 1 其它键退出程序")

scanf("%d",&x)

switch(x)

{case 1:

goto again

break

default:

return

}

}

不多说,先看代码:

import java.util.*

import java.io.*

public class wordsRate {

public static void main(String[] args) throws Exception {

BufferedReader infile = new BufferedReader(new FileReader("article.txt"))

String string

String file = null

while ((string = infile.readLine()) != null) {

file += string

}

file = file.toLowerCase()

file = file.replaceAll("[^A-Za-z]", " ")

file = file.replaceAll("\\s+", " ")

String words[]

words = file.split("\\s+")

Map<String, Integer>hashMap = new HashMap<String, Integer>()

for (int i = 0i <words.lengthi++) {

String key = words[i]

if (hashMap.get(key) != null) {

int value = ((Integer) hashMap.get(key)).intValue()

value++

hashMap.put(key, new Integer(value))

} else {

hashMap.put(key, new Integer(1))

}

}

Map<String, Object>treeMap = new TreeMap<String, Object>(hashMap)

Map<String, Object>treeMap1 = new TreeMap<String, Object>(hashMap)

BufferedWriter bw = new BufferedWriter(new FileWriter("result.txt"))

//下面是我改动的你的代码:

Iterator iter = treeMap.entrySet().iterator()

//定义两个新的数组ss1和ss2,数组长度就是hashMap的长度,里面放分别是hashMap的value和key

String ss1[]=new String[treeMap.size()]

int ss2[]=new int[treeMap.size()]

int i=0

while (iter.hasNext()) {

Map.Entry entry = (Map.Entry) iter.next()

int val = (Integer)entry.getValue()

String key =(String) entry.getKey()

ss1[i]=key

ss2[i]=val

i++

}

//下面将ss1数组进行排序,并将其与ss2数组的内容相对应起来

int sValue=0

String sKey=""

for(int j=0j<ss2.lengthj++){

for(int k=0k<ik++){

if(ss2[j]>ss2[k]){

sValue=ss2[j]

sKey=ss1[j]

ss2[j]=ss2[k]

ss1[j]=ss1[k]

ss2[k]=sValue

ss1[k]=sKey

}

}

}

for(int j=0j<ss2.lengthj++){

System.out.println(ss1[j]+"="+ss2[j])

bw.write(ss1[j]+"="+ss2[j])

bw.newLine()

bw.flush()

}

}

}

代码是本人自己写的,也经过了自己的验证,肯定没问题,希望采纳。

功能实现了,我是将其key和value值放在了数组之中,然后进行排序,将其输出到了txt文件里

排序方式不一样,实现的方式也不一样,所谓仁者见仁智者见智。

你这样存单词也太浪费空间了,你可以把一个单词放到一个变量里。可以这样解决:用一个变量(word)记单词,另一个变量(ch)去接收文章的每个字符,当if(ch>='a'&&ch<='z') &&(ch>='A'&&ch<='Z')word+=chelse { ch=nextchar()并且这时变量word中就是一个完整的单词了,你是怎么存储你就随意了.}

你在存储是可以记数,当有一定的数量是你可以删除什么的都可以.也可以放到文件里.


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7779981.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-09
下一篇2023-04-09

发表评论

登录后才能评论

评论列表(0条)

    保存