zoukankan      html  css  js  c++  java
  • 用c语言实现文本文件中的字符筛选分析(一)

      近期遇到这样一个问题:写一个程序,分析一个文本文件(英文文章)中各个词出现的频率,并且把频率最高的10个词打印出来。

      解决这个问题我认为要解决这样几个问题:

      1)如何实现文本文件中数据的有效读取;(这个本人对文件操作不太熟练,所以单独拿出来当做一个问题)

      2)如何从读出的数据中分析出一个一个的单词;

      3)如何累计计算出每个单词的出现次数;

      4)如何为每词出现的次数排序,打印出出现次数前10的单词;

      5)算法的效率问题,即对整个文本文件中数据的遍历次数;

      初步代码如下:  

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define MAX 1000000
    void main(){
     struct Word{
     char word_str[20];
     int mount;
     }word[MAX],temp;
     FILE *fp;
     char ch;
     int flag=0;//指示前一个字符是不是非英文字母字符,前一个字符是非英文字母置flag=0,不是非英文flag=1
     int i=0,j=0,k=0;//计数
     for(i=0;i<MAX;i++){//初始化各单词数量为0
     word[i].mount=0;
     }
     i=0;
     if((fp=fopen(".\eng.txt","r+"))==NULL){
     printf("无法打开此文件");
     exit(0);
     }
     while(ch!=EOF){//这里对于处理最后一个符号不是非英文字母的文章有bug,有改进空间
     ch=fgetc(fp);
      if(((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))!=0){
      flag=0;
      i++;
      j=0;
      for(k=0;k<i-1;k++){
       if(strcmp(word[i-1].word_str,word[k].word_str)==0){
       word[k].mount++;
       i=i-1;
       break;
       }
      }
      }
      else{
      flag=1;
      word[i].word_str[j]=ch;
      word[i].word_str[j+1]='';
      j++;
      }
     }
     fclose(fp);
     for(k=0;k<=i-1;k++){
      for(j=k+1;j<=i-1;j++){
       if(word[k].mount<word[j].mount){
       temp=word[k];
       word[k]=word[j];
       word[j]=word[k];
       }
      }
     } 
     printf("下面输出使用频率最高的10个单词(相等频率超出10个不计) ");
     for(k=0;k<10;k++){
     printf("%s ",word[k].word_str);
     }
    }

     运行没有错误,但是不出结果,很是郁闷。3个小时的成果,也就这样。下周继续吧。

    然后希望有编程高手大大指点一下O.o (如果您有时间想指点小子,请联系qq:1766388993)

    TO BE CONTINUED...

  • 相关阅读:
    21.Android之SQLite数据库学习
    20.(转)Android的样式(Style)和主题(Theme)
    19.Android之文件存储方法学习
    18.Android之SharedPreferences数据存储学习
    17.(转) Android之四大基本组件介绍与生命周期
    16.(转) Android之Support v4、v7、v13的区别和应用场景
    15.Android中LinearLayout布局一些小记录
    14.Android之Layout布局学习
    13. (转) Android一些布局属性详解
    12.Android之Tabhost组件学习
  • 原文地址:https://www.cnblogs.com/stduyangbo/p/3562074.html
Copyright © 2011-2022 走看看