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...

  • 相关阅读:
    android开发我的新浪微博客户端-用户授权页面UI篇(3.1)
    android开发我的新浪微博客户端-OAuth篇(2.1)
    android开发我的新浪微博客户端-载入页面sqlite篇(1.2)
    android开发我的新浪微博客户端-载入页面UI篇(1.1)
    android 强制设置横屏 判断是横屏还是竖屏
    android 各种进度条(ProgressBar)
    android:百度地图-给地图添加标注物
    android应用与服务的通信之学生查询系统案例源码
    android手机多线程断点续传下载器案例源码
    android外拨电话拦截器,完整源码
  • 原文地址:https://www.cnblogs.com/stduyangbo/p/3562074.html
Copyright © 2011-2022 走看看