M2

来源:互联网 发布:无损音乐剪切软件 编辑:程序博客网 时间:2024/06/08 16:04

试着开发一个管理英语单词的工具,要求:
1. 单词在word.txt 里面 文件里面的单词可以随时添加和删除。每一行形式 “computer :: 计算机”;
2. 实现接口函数 generateBlank (int style, int NumWord, int NumHidden), 其中style是产生文件形式,NumWord 是随机抽出的单词数目, NumHidden是每个单词隐藏的字符个数。该接口实现分三类:
generateBlank(1, 20, 2)此时 style=1: 从word.txt随机抽取 20行,并对英文单词进行随机的字母隐藏 如 “dance :: 舞蹈,跳舞”, NumHidden=2, 可以产生 “a_ce :: 舞蹈,跳舞”, ““出现的位置是随机的;
generateBlank(2, 20, -1)此时 style=2: 从word.txt随机抽取 20行,只保留中文注释,如“舞蹈,跳舞 :: ___”;
generateBlank(3, 20, -1)此时 style=3;从word.txt随机抽取20行,只保留英文,如”dance :: __________”;
generateBlank (int style, int NumWord, int NumHidden) 产生的结果输出到文件 text_style_NumWord_NumHidden.txt 并把随机抽取到的数据放到 text_style_NumWord_NumHidden_result.txt

#include<stdio.h>#include<stdlib.h>#include<time.h> #include<string.h>typedef struct{        char s[50];    int flag;   //标记是否被修改    int length;    //单词的长度}Word;Word str[50];     //单词表int n;            //输入单词的数目void generateBlank (int style, int NumWord, int NumHidden){    int index,p1,p2,k;    srand((unsigned)time(NULL));    if(style==3&&NumWord==20&&NumHidden==-1){        for(int i=0;i<20;){            index=(rand()%n);            if(str[index].flag==0)                i++;            else                continue;            //printf("index=%d\n",index);            for(int j=0;str[index].s[j]!='\0';j++)                if(str[index].s[j]<'a'||str[index].s[j]>'z')                    if(str[index].s[j]!=':'&&str[index].s[j]!=' '){                        str[index].s[j]='_';                        str[index].flag=1;                    }        }    }    else if(style==2&&NumWord==20&&NumHidden==-1){        for(int i=0;i<20;){            index=(rand()%n);            if(str[index].flag==0)                i++;            else                continue;            //printf("index=%d\n",index);            for(int j=0;str[index].s[j]!='\0';j++)                if(str[index].s[j]>='a'&&str[index].s[j]<='z'){                    str[index].s[j]='_';                    str[index].flag=1;                }        }    }    else if(style==1&&NumWord==20&&NumHidden==2){        for(int i=0;i<20;){            index=rand()%n;            if(str[index].flag==0)                i++;            else                continue;            //printf("index=%d\n",index);            for(k=0;k<1;){                p1=rand()%(str[index].length);                p2=rand()%(str[index].length);                if(p1!=p2)                    k++;                else                    continue;                printf("p1=%d,p2=%d\n",p1,p2);                str[index].s[p1]='_';                str[index].s[p2]='_';                str[index].flag=1;            }        }       }    else        printf("不存在此类接口,输入有误!");}void save1(){       FILE *fp;    int i;    if((fp=fopen("C:\\Users\\Carl_Hugo\\Desktop\\a.txt","wb"))==NULL){        printf("can not open\n");        return;    }    for(i=0;i<n;i++)        if(fwrite(&str[i],sizeof(Word),1,fp)!=1)            printf("ERROR\n");    fclose(fp);}void save2(){       FILE *fp;    int i;    if((fp=fopen("C:\\Users\\Carl_Hugo\\Desktop\\b.txt","wb"))==NULL){        printf("can not open\n");        return;    }    for(i=0;i<n;i++)        if(fwrite(&str[i],sizeof(Word),1,fp)!=1)            printf("ERROR\n");    fclose(fp);}int main(){       int s,nw,nh,i,number;    printf("输入 style NumWord NumHidden(用空格分开)\n共以下三种形式\n(1,20,2)\n(2,20,-1)\n(3,20,-1)\n:");    scanf("%d%d%d",&s,&nw,&nh);    printf("输入单词表中的单词数(大于20):");    scanf("%d",&n);    getchar();    printf("输入单词:\n");    for(i=0;i<n;i++){        gets(str[i].s);        str[i].flag=0;        int j=0;        while(str[i].s[j]>='a'&&str[i].s[j]<='z')j++;          str[i].length=j;        save1();    }    printf("你输入的单词为:\n");    for(i=0;i<n;i++)        printf("%s\n",str[i].s);    generateBlank (s,nw,nh);    printf("\n");    printf("处理后的单词为:\n");    for(i=0;i<n;i++)        printf("%s\n",str[i].s);    save2();   return 0;}
0 0
原创粉丝点击