美文网首页
【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++】词汇表生成

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

  • JSON数据转C++结构体

    JSON数据自动生成C++结构体 JSON数据自动生成C++结构体背景nlohmann/json基础Python自...

  • Unreal 如何编译C++

    1. C++编译 (1)C++编译后生成的文件 以下对生成文件的常见文件进行说明 (2.)C++编译过程 2. U...

  • C# 静态调用C++ 生成的dll,即非托管dll

    C++文集板块有一节《C++ 如何生成一个DLL动态链接库》已经讲述了,C++如何生成一个动态链接库CPPDLLD...

  • C++编写dll与调用

    重要参考 c++ dll编写与加载;C++编程笔记:dll的生成与使用;8.DLL导出C++类; 在 Visual...

  • protobuf

    protobuf版本 Person.proto 将proto结构描述模板生成C++代码 C++的protobuf序...

  • 自动释放池

    objc下层c++代码 生成c++代码查看 clang -rewrite-objc main.m -o main....

  • C语言简单实现面向对象思想

    C语言和C++都会经过汇编,生成汇编代码,在汇编代码的阶段,是分辨不出是C语言还是C++语言的。在早期C++还没有...

  • OC和C++交互案例(1)

    OC调用C++ 1.新建生成一个C++文件CFile:New->File->IOS,选择”C++File“选项。 ...

  • 探索Objective-C中的class和对象在C++中的原理实

    前言:OC 可以编译成C++,从C++的角度探索class和对象的的本质 1、把OC文件转成C++文件 生成下面的...

网友评论

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

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