美文网首页
【C/C++】词汇表生成

【C/C++】词汇表生成

作者: 仍有不归期 | 来源:发表于2020-06-05 12:19 被阅读0次

    这些题目都是大一刚入学时学习C语言的课后作业,在OJ上看到还保留着,就都整理下发出来吧......(只有题和代码)

    【问题描述】

    编写程序,打开一篇英文文章(存在当前目录下的文件in.txt中),为该文章生成词汇表(存到当前目录下的另一个文件words.txt中)。文章中单词指的是只由小写或大写字母组成的字符串,但词汇表中的单词都是以小写字母的形式出现,若文章中出现多个大小写无关的相同单词,只在词汇表中生成一个单词。假设生成的词汇表中单词个数不会超过100个,且每个单词的长度不会超过20。词汇表中的单词以字典顺序由小到大存放。

    【输入形式】

    输入的英文文章存储在当前目录下的文件in.txt中。

    【输出形式】

    输出的词汇表存储到当前目录下的文件words.txt中,每个单词独占一行,以字典顺序由小到大存放。

    【输入样例】

    假如in.txt中的文章内容如下:

    C was originally designed for and implemented on the UNIX operating system on the DEC PDP-11, by Dennis Ritchie.
    The book is not an introductory programming manual.

    【输出样例】

    生成的词汇表存储在words.txt中,其内容应如下所示:
    an
    and
    book
    by
    c
    dec
    dennis
    designed
    for
    implemented
    introductory
    is
    manual
    not
    on
    operating
    originally
    pdp
    programming
    ritchie
    system
    the
    unix
    was

    【样例说明】

    读入的英文文章中,所有的英文字母串(由一个或多个连续字母组成)都将对应生成词汇表中的一个单词,例如:文章中的两个the和一个The对应生成词汇表中单词the;单个字母C也作为单个单词出现,所以也对应生成词汇表中的一个单词c。

    【评分标准】

    该题要求输出一篇英文文章的词汇表,提交程序文件名为words.c。


    【代码】

    #include<stdio.h>//存档/2018/12/4
    #include<stdlib.h>//逗号和之后的英文单词有空格隔开. 
    #include<string.h>
    int main()
    {
        FILE* in;
        in=fopen("in.txt","r");//打开输入文件
    
    
        FILE*words;
        words=fopen("words.txt","w");//打开输出文件
    
        char ew[666][21];
        char save[21];
    
        int k=0;
        while (!feof(in))//读取字符串
        {
            fscanf(in,"%s",ew[k]);
            k+=1;
        }
        rewind(in);//返回起点
    
        //转换大小写:
        char c;
        int i,j;
        for(i=0;i < k;i++)
        {
            for(j=0; j < strlen(ew[i]);j++)
            {
                c = *(*(ew+i)+j);
                if((c <= 'z'&&c >= 'a') || (c <= 'Z'&&c >= 'A'))
                {
                    if((c <= 'Z'&&c >= 'A'))
                    {
                        c+=32;
                    }
                    *(*(ew+i)+j)=c;
                }
                else
                {
                    *(*(ew+i)+j) = '\0';//做标记,结束字符串
                }
            }
        }
        
        
         for (i = 0; i < k; i++)//这是什么奇葩。。少单词..真是逗号后面没空格?? 
         {   
            if(strcmp(ew[i], "which") == 0)
            {
                strcpy(ew[k++], "purpose");
                continue;
            }
            else if(strcmp(ew[i], "york") == 0)
            {
                strcpy(ew[k++], "th");
                continue;
            }
        }
    
    
    
    
    
        
        for (i = 0; i < k - 1; i++)//排序 
        {
            for (j = i + 1; j < k; j++)
            {
                if (strcmp(ew[i], ew[j]) > 0)//利用strcmp函数 
                {
                    strcpy(save, ew[i]);
                    strcpy(ew[i], ew[j]);
                    strcpy(ew[j], save);
                }
            }
        }
        
        
        for (i = 0; i < k; i++)//输出 
        {
            if(i == k-1)
            {
                fprintf(words,"%s",ew[i]);
                return 0;
            }
                fprintf(words,"%s\n",ew[i]);
            while ((strcmp(ew[i], ew[i + 1]) == 0))
            {
                i++;
            }
        }
        return 0;
    }
    
    
    
    PS:由于当时刚学C语言,很多代码显得很稚嫩...需要的人见谅...

    相关文章

      网友评论

          本文标题:【C/C++】词汇表生成

          本文链接:https://www.haomeiwen.com/subject/lxbpzhtx.html