zoukankan      html  css  js  c++  java
  • 读入英文文章,输出频率最高10个单词

    新学期伊始,软件工程的老师就对我们要求了第一个个人的程序设计,刚开始真是一头雾水的感觉,对于编程本来就不是擅长的我这次真的是不知道怎么办了。刚开始只有对于这个程序的初步的想法,知道每一步应该怎么做,后来逐渐看书学习,并问编程比较厉害的同学就了解了一些数组,排序,读入文件等一系列的方法便开始编这个程序。刚开始程序初步完型,突然发现识别不了英文中的大写字母,几经修改后知道了自己错在哪里。还有一些输出的完善,都是在之后的修改中实现的。本次个人程序设计也学习到了新的几个函数strcpy函数的意思是字符串赋值语句 strcmp:比较两个字符串strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符''为止,然后返回计数器值。

    具体步骤:一·定义各个变量名

                 二·将文件中的单词存放到二维数组中

                 三·冒泡排序并将以后出现相同的单词设为空串,次数加一

                 四·输出:将频率最高的10个单词依次输出

    主要代码

    #include <stdio.h>
    #include<string.h>
    int main()
    {
     FILE *fp;
      fp=fopen("d://a.txt ","r");//打开d盘的文本文件

    char s[1000][26],ch[10000];
    char real[100][26],t[26];
    char tem[26];
    int i=0,j=0,k=0,sum=0,q=0,r=0;
    int n,m,p=0,count[1000]={0};
    int temp,l;
      //定义数组定义各个变量名

    while((ch[k]=fgetc(fp))!=EOF)
    {if(ch[k]>='A'&&ch[k]<='Z')//大写字母变为小写
     ch[k]=ch[k]+32;
    if(ch[k]>='a'&&ch[k]<='z'||ch[k]=='-')
     {
        s[i][j]=ch[k];
        j++;
    }//将文件中的单词存放到二维数组中

    else {  s[i][j]='';  i++;  j=0;  sum++;  

    }

     k++;  

    }  

    for(m=0;m<sum;m++)

      { 

        l=strlen(s[m]);    

    for(n=0;n<l;n++)   

      if(s[m][n]=='-')   

       {    

      s[m][n]='';     

    strcat(s[m],s[m+1]);

         s[m+1][0]='';  

       }

     }  

    for(m=sum;m>0;m--)

        {

          for(n=0;n<m;n++)  

         if(strcmp(s[n],s[n+1])>0)   

          {        

       strcpy(t,s[n]);    

           strcpy(s[n],s[n+1]);   

            strcpy(s[n+1],t);   

        }

      }//以后出现相同的字符串置零

    for(m=0;m<sum;m++)

      {   

      for(n=m+1;n<sum;n++)   

        if(strcmp(s[m],s[n])==0)  

             s[n][0]='';      

             }  

    for(m=0;m<sum;m++)  

    {      

    if(s[m][0]!='')  

       {      

    for(n=m+1;;n++)    

    {     

    if(s[n][0]=='')   

      count[r]++;

        else if  

       (s[n][0]!='')

        break;   

      }  

       r++;   

      }  

       if(s[m][0]!='')   

      {strcpy(real[p],s[m]);

        p++;   

      q++;

    }  

    }//冒泡排序并将以后出现相同的单词设为空串,次数加一

     for(i=q-1;i>0;i--)  

       {   

        for(j=0;j<i;j++)  

        {   

       if(count[j]<count[j+1])  

        {   

      temp=count[j];  

       count[j]=count[j+1];

        count[j+1]=temp;   

      strcpy(tem,real[j]);    

    strcpy(real[j],real[j+1]);  

       strcpy(real[j+1],tem);   

       } } }printf("频率最高的十个单词依次为: ");

       if(q<10)      for(i=0;i<q;i++)  

       {        

      printf(" %s",real[i]);

        printf(" ");  

       printf(" %d ",count[i]+1);      

        }    

      else     

      for(i=0;i<10;i++)   

          {         

        printf(" %s",real[i]);

           printf(" ");

        printf(" %d ",count[i]+1);    

          }

      fclose(fp);  

    return 0;

    }  //输出:将频率最高的10个单词依次输出

    以上为这次个人程序设计的主要流程,个人觉得自己还是处在编程的开始阶段,以后还需要更多的努力,不足之处希望大神们批评指正。

  • 相关阅读:
    QD提示软件过期a
    病毒conime.exe、mmlucj.exe、severe.exe 查杀办法
    当UG的License服务器换了后, 客户端如何调整?
    怎样理解构造函数和析构函数
    详解Par2 Files
    Nginx的基本使用和配置
    如何使用bootstrap实现轮播图?
    使用相对长度单位rem布局网页内容
    java中如何对汉字进行排序?
    班级日常分享:一天一瞬间!
  • 原文地址:https://www.cnblogs.com/lyl040614/p/3576999.html
Copyright © 2011-2022 走看看