# edic **Repository Path**: zThanks/edic ## Basic Information - **Project Name**: edic - **Description**: No description available - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-07-05 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # edic #### 描述 ### 技术点 - 数组 - 字符串 - 结构体 - 指针 - 折半查找 - 文件操作 - 排序(冒泡排序、插入排序) - 链表(链表的添加、删除、遍历) ### 功能分析 #### 主要功能 - 读取文件 - 英译汉 - 汉译英 - 单词添加 - 单词删除 - 单词修正 - 文本排序 ### 技术点讲解 #### 文件操作 1. fopen 打开一个文件 ``` 函数原型 FILE *fopen(char *filename, char *mode); ``` 2. fclose 关闭一个文件 3. fgetc 从文件中读取一个字符 4. fputc 写一个字符到文件中去 5. fgets 从文件中读取一个字符串 6. fputs 写一个字符串到文件中去 7. fprintf 往文件中写格式化数据 8. fscanf 格式化读取文件中数据 ``` int fscanf(FILE *stream, const char *format, ...) 参数 stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。 format -- 这是 C 字符串,包含了以下各项中的一个或多个:空格字符、非空格字符 和 format 说明符 fscanf(fp, "%s %s %s %d", str1, str2, str3, &year); ``` 9. fread 以二进制形式读取文件中的数据 10. fwrite 以二进制形式写数据到文件中去 11. getw 以二进制形式读取一个整数 12. putw 以二进制形式存贮一个整数 13. 文件状态检查函数 feof 文件结束 ``` (1) 函数原型 int feof(FILE *fp) (2) 功能说明    该函数用来判断文件是否结束。 (3) 参数说明    fp:文件指针。 (4) 返回值    0:假值,表示文件未结束。    1:真值,表示文件结束。 ``` 14. ferror 文件读/写出错 15. clearerr 清除文件错误标志 16. ftell 了解文件指针的当前位置 [c文件操作参考网站](https://www.cnblogs.com/saolv/p/7793379.html) #### 字符串操作 1. strcpy拷贝一个字符串到另一个 ``` 函数原型 char *strcpy(char *destin, char *source); ``` 2. strstr 查找子串 ``` 函数原型: extern char *strstr(char *str1, const char *str2); 语法: * strstr(str1,str2) str1: 被查找目标 string expression to search. str2: 要查找对象 The string expression to find. 返回值:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。 ``` 3. strcmp 比较两个字符串是否相等 ``` 函数原型: extern int strcmp(const char *s1,const char *s2); 当s1s2时,返回正数。 ``` [百度百科-字符串函数讲解](https://baike.baidu.com/item/string.h/4262091?fr=aladdin#4_2) ### 单链表操作 [单链表讲解](https://blog.csdn.net/fanyun_01/article/details/79831877) ## 实现方式 读取本地文件`dictionary.txt`,然后将文件读取到内存中,使用数组或链表来接收,然后对数组进行查找添加删除,执行完相关操作之后,在执行持久化操作,保存到本地的`txt`文件中 ### 文本特点 在txt文件中,每一行存储一条单词信息。每一行由单词英文、制表符、单词中文意思组成。 ### 使用数组实现方式 读取**dictionary.txt**文本文件,通过读取文本文件的内容到一个结构体数组中,对结构体数组进行相应的操作,然后再重新写入文本文件。 新建一个结构体数据类型`word`,该结构体包含英文和中文两个部分组成。这样每读取一行txt文件中的内容,就将读取到的内容,解析到一个结构体中。 ``` //结构体定义 typedef struct word { //单词英文 char eng[30]; //单词中文 char cn[50]; }word; ``` ### 使用链表实现方式 读取**dictionary.txt**文本文件,在读取文本文件时,每读取文本文件中的一行数据,就把改行数据解析为一个节点,然后把该节点添加绕链表中。新添加单词则会添加到链表中,然后执行持久化操作;删除单词,则遍历链表,如果查找到,则把链表中的节点删除,然后执行持久化操作;修改单词,遍历链表,如果单词存在则对链表中的节点进行修改,单词不存在则返回。 新建一个结构体数据类型`word`,该结构体包含英文和中文以及下一个节点指针三个部分组成。这样每读取一行txt文件中的内容,就将读取到的内容,解析到一个结构体中,然后再把该节点添加到链表中。 ``` //结构体定义 typedef struct word { //单词英文 char eng[30]; //单词中文 char cn[50]; struct word *next; }word,*pword; ``` ### 说明 1. `DEV C++ 5.11`和`vc++ 6.0`编译通过 2. `dictionay.txt`位于`resource`文件夹中,**使用的是GBK编码方式**。