
#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中就是一个完整的单词了,你是怎么存储你就随意了.}你在存储是可以记数,当有一定的数量是你可以删除什么的都可以.也可以放到文件里.
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)