zoukankan      html  css  js  c++  java
  • 文章单词统计接龙


    package
    fengzhuang; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Scanner; class Word { String value; int geshu; static Word next; public Word(String value,int geshu) { this.value=value; this.geshu=geshu; next=null; } public Word() { this.value=""; this.geshu=0; next=null; } } public class Ceshi { public static void main(String[] args) { System.out.println("请输入您想完成的功能:"); int i=0; for(int n=1;n<10;n++) {System.out.println("1:统计字母;2:统计单词;3:指定单词"); Scanner scan=new Scanner(System.in); i=scan.nextInt(); if(i==1) { Zimu(); } if(i==2) { try { Quan(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(i==3) { try { Danci(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println("是否退出 退出0,不退出-其他"); n=scan.nextInt(); if(n==0) { break; } } } static void Zimu() { try { char shu[] = new char[10000000]; char zimu[] = new char[52]; int j=0; int count[]=new int[52]; String pathname="E:\o1.txt"; File filename=new File(pathname); InputStreamReader reader=new InputStreamReader(new FileInputStream(filename)); BufferedReader br=new BufferedReader(reader); String line[]=new String[100];; for(int i=0;i<line.length;i++){ line[i]=br.readLine(); } br.close(); int k=0; while(line[k]!=null) { for(int i=0;i<line[k].length();i++) { shu[j]=line[k].charAt(i); j++; } k++; } for(int i=0;i<shu.length;i++) { switch(shu[i]) { case 'a':zimu[0]='a';count[0]++;break; case 'b':zimu[1]='b';count[1]++;break; case 'c':zimu[2]='c';count[2]++;break; case 'd':zimu[3]='d';count[3]++;break; case 'e':zimu[4]='e';count[4]++;break; case 'f':zimu[5]='f';count[5]++;break; case 'g':zimu[6]='g';count[6]++;break; case 'h':zimu[7]='h';count[7]++;break; case 'i':zimu[8]='i';count[8]++;break; case 'j':zimu[9]='j';count[9]++;break; case 'k':zimu[10]='k';count[10]++;break; case 'l':zimu[11]='l';count[11]++;break; case 'm':zimu[12]='m';count[12]++;break; case 'n':zimu[13]='n';count[13]++;break; case 'o':zimu[14]='o';count[14]++;break; case 'p':zimu[15]='p';count[15]++;break; case 'q':zimu[16]='q';count[16]++;break; case 'r':zimu[17]='r';count[17]++;break; case 's':zimu[18]='s';count[18]++;break; case 't':zimu[19]='t';count[19]++;break; case 'u':zimu[20]='u';count[20]++;break; case 'v':zimu[21]='v';count[21]++;break; case 'w':zimu[22]='w';count[22]++;break; case 'x':zimu[23]='x';count[23]++;break; case 'y':zimu[24]='y';count[24]++;break; case 'z':zimu[25]='z';count[25]++;break; case 'A':zimu[26]='A';count[26]++;break; case 'B':zimu[27]='B';count[27]++;break; case 'C':zimu[28]='C';count[28]++;break; case 'D':zimu[29]='D';count[29]++;break; case 'E':zimu[30]='E';count[30]++;break; case 'F':zimu[31]='F';count[31]++;break; case 'G':zimu[32]='G';count[32]++;break; case 'H':zimu[33]='H';count[33]++;break; case 'I':zimu[34]='I';count[34]++;break; case 'J':zimu[35]='G';count[35]++;break; case 'K':zimu[36]='K';count[36]++;break; case 'L':zimu[37]='L';count[37]++;break; case 'M':zimu[38]='M';count[38]++;break; case 'N':zimu[39]='N';count[39]++;break; case 'O':zimu[40]='O';count[40]++;break; case 'P':zimu[41]='P';count[41]++;break; case 'Q':zimu[42]='Q';count[42]++;break; case 'R':zimu[43]='R';count[43]++;break; case 'S':zimu[44]='S';count[44]++;break; case 'T':zimu[45]='T';count[45]++;break; case 'U':zimu[46]='U';count[46]++;break; case 'V':zimu[47]='V';count[47]++;break; case 'W':zimu[48]='W';count[48]++;break; case 'X':zimu[49]='X';count[49]++;break; case 'Y':zimu[50]='Y';count[50]++;break; case 'Z':zimu[51]='Z';count[51]++; } } int ci=0; int sum=0; System.out.println("短文中各字母出现情况统计如下:"); for(int i=0;i<52;i++) { if(count[i]!=0) { ci++; sum+=count[i]; System.out.println(ci+".字母"+zimu[i]+"的出现次数是:"+count[i]); } } System.out.println("字母共计:"+sum+"个"); }catch (Exception e) { e.printStackTrace(); } } static void Quan()throws IOException { Word word=new Word(); //单词的链头 Word lian,xin; String str=""; FileReader f=new FileReader("E:\o1.txt"); //读取英文文件 char[] c=new char[1]; //每次读取一个字母 int b=0; boolean exist=false; //判断单词是否存在于 word 链中 while((b=f.read(c))!=-1) //每次读取一个字母直到最后 { //如果字符为 换行、空格、单引号、双引号、逗号、句号 则为一个单词的结束及另一个单词的开始 if(String.valueOf(c).equals(" ")||String.valueOf(c).equals(" ")||String.valueOf(c).equals(" ")||String.valueOf(c).equals(",")||String.valueOf(c).equals(".")||String.valueOf(c).equals(""")||String.valueOf(c).equals("'")) { lian=word; while(lian!=null) { if(lian.value.equalsIgnoreCase(str)) //如果单词在单词链中存在,则单词个数++ { lian.geshu++;exist=true;break; } else { lian=lian.next; } } if(exist==false) //如果不存在,则在单词链中添加 { xin=new Word(str,1); xin.next=word.next; word.next=xin; str=""; } else { exist=false; str=""; } } else //单词 { str+=String.valueOf(c); } } int N=20; for(int i=1;i<=N;i++) { xin=new Word("",0); lian=word.next; //找到单词链中个数最多的 while(lian!=null) { if(lian.geshu>xin.geshu) { xin=lian; } lian=lian.next; } //输出单词链中个数最多的 System.out.println("第"+i+"个 :"+xin.value+"个数:"+xin.geshu); lian=word; //删除单词链中单词个数最多的 while(lian.next!=null) { if(lian.next.value.equalsIgnoreCase(xin.value)) { lian.next=lian.next.next; break; } lian=lian.next; } } } static void Danci()throws IOException { Word word=new Word(); //单词的链头 Word lian,xin; String str=""; FileReader f=new FileReader("E:\o1.txt"); //读取英文文件 char[] c=new char[1]; //每次读取一个字母 int b=0; boolean exist=false; //判断单词是否存在于 word 链中 while((b=f.read(c))!=-1) //每次读取一个字母直到最后 { //如果字符为 换行、空格、单引号、双引号、逗号、句号 则为一个单词的结束及另一个单词的开始 if(String.valueOf(c).equals(" ")||String.valueOf(c).equals(" ")||String.valueOf(c).equals(" ")||String.valueOf(c).equals(",")||String.valueOf(c).equals(".")||String.valueOf(c).equals(""")||String.valueOf(c).equals("'")) { lian=word; while(lian!=null) { if(lian.value.equalsIgnoreCase(str)) //如果单词在单词链中存在,则单词个数++ { lian.geshu++;exist=true;break; } else { if(str.equals("a")||str.equals("the")||str.equals("and")) { break; } lian=lian.next; } } if(exist==false) //如果不存在,则在单词链中添加 { xin=new Word(str,1); xin.next=word.next; word.next=xin; str=""; } else { exist=false; str=""; } } else //单词 { str+=String.valueOf(c); } } // 循环10次 System.out.println("请输入您想查询的前几个出现此处最多的单词"); Scanner scan=new Scanner(System.in); int N=scan.nextInt(); for(int i=1;i<=N;i++) { lian=Word.next; xin=new Word("",0); lian=word.next; //找到单词链中个数最多的 while(lian!=null) { if(lian.geshu>xin.geshu) { xin=lian; } lian=lian.next; } //输出单词链中个数最多的 System.out.println("第"+i+"个 :"+xin.value+"个数:"+xin.geshu); lian=word; //删除单词链中单词个数最多的 while(lian.next!=null) { if(lian.next.value.equalsIgnoreCase(xin.value)) { lian.next=lian.next.next; break; } lian=lian.next; } } } }

    1)设计思路:定义几个数组:

    1单词数组,用来存放所有的单词

    2长度数组:用来存放从每一个单词开始,单词链的长度

    3结果数组:用来存放从每一个单词开始的单词链

    用每一个单词查询单词链,并用以上数组保存结果,再从长度数组中提取最大数的下标,输出结果数组该下标对应的字符串即可。

    4)总结:因为在代码中用到了双重循环,会使代码运行时间大大加长,我还没有找到用一层循环就可以得到结果的方法。

  • 相关阅读:
    LVS基于DR模式负载均衡的配置
    Linux源码安装mysql 5.6.12 (cmake编译)
    HOSt ip is not allowed to connect to this MySql server
    zoj 3229 Shoot the Bullet(无源汇上下界最大流)
    hdu 3987 Harry Potter and the Forbidden Forest 求割边最少的最小割
    poj 2391 Ombrophobic Bovines(最大流+floyd+二分)
    URAL 1430 Crime and Punishment
    hdu 2048 神、上帝以及老天爷(错排)
    hdu 3367 Pseudoforest(最大生成树)
    FOJ 1683 纪念SlingShot(矩阵快速幂)
  • 原文地址:https://www.cnblogs.com/yang-qiu/p/11006252.html
Copyright © 2011-2022 走看看