zoukankan      html  css  js  c++  java
  • 一个简单的c程序

    题目:查询一篇英文中出现的次数最多的10个单词

    分析:虽然题目只是简单的要求找出出现频率最多的10个单词。但是在实际的编程中,遇到的问题还是很多的。首先,得解决文件的打开问题,也就是说文件是从那个地方读取出来了的,在这里,我采用的是C语言中的文件的打开函数fopen()。根据书上的例子,然后在做了一些修改,基本上可以实现打开文件的目的。其次,要解决的是打开之后,对数据的分析。在这一步,第一,将文章出现的大写都转换成小写;第二,对这些字符串进行统计,出现的次数做一个统计。第三,对这些数据进行比较,也就是比较关键的排序。在这一步,我才用的是冒泡排序法。在排序的过程中,由于有许多,细节方面的问题没有处理好,所以整个程序的运行,还存在一些问题,并且整这个程序显得比较无序和杂乱,以后的几天我会继续对此程序进行后续的完成。下面,附上源程序:

    源程序:

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #define M 100000
    #define N 10
    struct word
     {
     char w[50];
     int n;
     }w[M];
     
     int main()
    {
     FILE *fp;
     char infile[30],ch;
     int i,flag;
     printf("请输入文件地址:");
     scanf("%s",infile);
     if((fp=fopen(infile,"r"))==NULL)
     {printf("无法打开此文件! ");
     exit(0);}
     while((ch=fgetc(fp))!=EOF)
     {  
        fclose(fp);
           for(i=0;i<N;i++)ko[i]=0;
           scanf("%d",&n);
           fg=0;
           i=0;
           strncpy(wd,ko,N);
        while(fg<at)
     {  
       if(isalpha(t[fg]))
       {
          wd[i]=t[fg];
      
        i++;
       }
       if(t[fg]==32&&i>0)break;
           fg++;
    }
        strncpy(root.a,ko,N);
    strcpy(root.a,wd);
    root.i=1;
    root.left=NULL;
    root.right=NULL;
    i=0;
    strncpy(wd,ko,N);
        while(fg<at)
    {  
       if(isalpha(t[fg]))
       {
          wd[i]=t[fg];
        i++;
       }
       if(t[fg]==32&&i>0)break;
            fg++;
    }
        else
        {
                 if(flag==1)
         {   b[i]='';
          for(j=0;j<k;j++)
          {
              if(strcmp(b,w[j].w)==0)
           {m=1;break;}
          }
           if(m) w[j].n++;
           else
           {w[k].n=1;strcpy(w[k].w,b);k++;}
         }
      
           if('A'<=ch && ch<='Z') ch+=32;
           if('a'<=ch && ch<='z')
        {b[i]=ch;i++;flag=1;}
      }
     }
     }
     for(i=0;i<k;i++) { printf("%s %d ",w[i].w,w[i].n);}
     printf(" ");
     for(i=0;i<k&&i<5;i++)
     {
      t=0;
      while(w[t].n==0) t++;
      for(j=1;j<k;j++)
      {
       if(w[j].n>w[t].n) t=j;
       else
        if(w[j].n==w[t].n)
        {
         if(strcmp(w[j].w,w[t].w)<0)
          t=j;
        }
      }
      printf("%s   出现次数:%d ",w[t].w,w[t].n);
      w[t].n=0;
     }
     return 0;
    }

    总结:本次的程序,由于本人对编程的生疏,导致本程序失败,问题不少,并且对基本的要求都没有完成。在以后的这周,会在空闲时间对程序进行改善,达到简化的目的。

  • 相关阅读:
    [手游项目2]-25-linux 端口time_wait
    [手游项目2]-24-linux MySql编译安装
    诛仙手游法宝铸元性价比
    法宝精进性价比对比
    [手游项目2]-23-游戏数据存储解决方案
    [手游项目2]-22-lua内存问题
    [手游项目2]-21-死循环排查
    [手游项目2]-20-mysql还原一个库的部分数据
    [手游项目2]-19-EError=1118, Reason=Row size too large (> 8126)
    bzoj1471
  • 原文地址:https://www.cnblogs.com/wuwei123/p/3577324.html
Copyright © 2011-2022 走看看