多的不说,直接上代码:

里面涉及的字典文件在这:这是传送门,下载下来以后把该文件放在工程目录下即可

 #define _CRT_SECURE_NO_WARNINGS

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h> #define MAX 111111 //最大记录数 struct dict
{
char *key;
char *content;
}; //去掉字符串结尾的回车,空格字符
void format_string(char *str)
{
size_t i;
for (i = strlen(str) - ; i >= ; i--)
{
if (str[i] != '\n' && str[i] != ' ' &&str[i] != '\r')
{
str[i + ] = '\0';
break;
}
}
} //打开字典文件,并读取文件内容
int open_dict(struct dict **p, const *dict_filenaem)
{
FILE *pfile = fopen(dict_filenaem, "r");
if (pfile == NULL)
return ;//文件打开失败,函数返回 *p = (struct dict *)malloc(sizeof(struct dict) * MAX);//固定分配MAX大小内存
memset(*p, , sizeof(struct dict)*MAX);//将分配内存初始化为0 char buf[] = { };
size_t len = ;
int i = ;//计数器
while (!feof(pfile))//循环读取文件,直到文件末尾
{
memset(buf, , sizeof(buf));
fgets(buf, sizeof(buf), pfile);//读取文件一行
len = strlen(buf);//得到读取到字符串长度
if (len > )
{
(*p)[i].key = (char *)malloc(len);//根据字符串长度分配内存
memset((*p)[i].key, , len);
format_string(buf);//去掉字符串结尾的空格和回车
strcpy((*p)[i].key, &buf[]);//将读取的内容拷贝到key中
} memset(buf, , sizeof(buf));
fgets(buf, sizeof(buf), pfile);
len = strlen(buf);
if (len > )
{
(*p)[i].content = (char *)malloc(len);
memset((*p)[i].content, , len);
strcpy((*p)[i].content, &buf[]);
} i++;
} fclose(pfile);//关闭字典文件 return i;//返回读取到的字典词条数 } //根据关键字key,在字典中查找内容
int search_dict(const struct dict *p, int size, const char *key, char *content)
{
int i = ;
for (i = ; i < size; i++)//遍历字典
{
if ((p[i].key == NULL) || (p[i].content) == NULL)
continue; if (strcmp(p[i].key, key) == )
{
strcpy(content, p[i].content);
return ;//找到符合条件记录,返回1
}
} return ;//没有找到符合条件记录,返回0
} //释放内存
void free_dict(struct dict *p, int size)
{
int i = ;
for (i = ; i < size; i++)
{
if (p[i].key)
{
free(p[i].key);
}
if (p[i].content)
{
free(p[i].content);
}
}
free(p);//释放p内存
} int main()
{ struct dict *p = NULL; int dict_size = open_dict(&p, "dict.txt"); char key[];
char content[];
while ()
{
memset(key, , sizeof(key));
memset(content, , sizeof(content));
fgets(key, sizeof(key),stdin);//从键盘得到用户输入
format_string(key);
if (strncmp(key, "command=exit", ) == )
break; if (search_dict(p, dict_size, key, content))//根据用户输入在字典中检索
{
printf("%s", content);
}
else
{
printf("not found\n");
}
}
system("pause");
return ;
}

下面是移植到QT上的界面程序:传送门,移植很简单,但是要注意QT采用 的是UTF8编码,而windows的记事本是采用GBK编码,所以需要进行编码转化

  • 步骤如下
  • 1.添加头文件<QTextCodec>
  • 2.建立一个从UTF8到GBK转化的桥梁:QTextCodec *codec = QTextCodec::codecForName("GBK");
  • 3.转化成GBK编码,然后copy到char数值中进行操作 strcpy(key,codec->fromUnicode(ui->lineEdit->text()));

如果要把GBK编码转化成utf8编码,则需要一个操作即可codec->toUnicode(content),上代码

 void Widget::on_pushButton_clicked()
{
QTextCodec *codec = QTextCodec::codecForName("GBK");//建立一个从UTF8到GBK转化的桥梁
char key[] = {};
char content[] = {};
//ui->lineEdit->text();//得到用户在edit中输入的内容,类型是QString,QString是QT提供的一个字符串类
//qt默认的字符串都是UTF8编码
strcpy(key,codec->fromUnicode(ui->lineEdit->text()));
format_string(key); if (search_dict(p, dict_size, key, content))//根据用户输入在字典中检索
{
//content内容是GBK格式的字符串
ui->label->setText(codec->toUnicode(content));//把GBK编码转化成UTF8格式
}
else
{
ui->label->setText("not found");
}
}

6.C语言文件操作之英语电子字典的实现,dos版的更多相关文章

  1. go语言文件操作,这期资料比较详细( 欢迎加入go语言群: 218160862 )

    go语言文件操作,这期资料比较详细 欢迎加入go语言群: go语言深圳群 golang深圳 218160862 点击加入 文件操作 func Open(name string) (file *File ...

  2. C语言文件操作

    C语言文件操作,以下以基本的例子和说明来展开怎么通过C语言来进行文件操作. 操作文件,我们得需要知道什么?当然是路径和文件名. 首先我需要知道我操作的文件在哪里,叫什么名字.在C语言中还存在一个打开方 ...

  3. C 语言文件操作

    C 语言文件操作 1. 数据流:     程序与数据的交互以流的形式进行.fopen 即打开数据流,fclose 即刷新数据流.     所谓数据流,是一种抽象,表示这段数据像流一样,需要逐步接收,不 ...

  4. C语言文件操作函数

    C语言文件操作函数大全 clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include<stdio.h> 定义函数 void clearerr(FILE * str ...

  5. C语言文件操作解析(五)之EOF解析(转载)

      C语言文件操作解析(五)之EOF解析 在C语言中,有个符号大家都应该很熟悉,那就是EOF(End of File),即文件结束符.但是很多时候对这个理解并不是很清楚,导致在写代码的时候经常出错,特 ...

  6. 【转】C语言文件操作解析(三)

    原文网址:http://www.cnblogs.com/dolphin0520/archive/2011/10/07/2200454.html C语言文件操作解析(三) 在前面已经讨论了文件打开操作, ...

  7. C语言文件操作函数大全(超详细)

    C语言文件操作函数大全(超详细) 作者: 字体:[增加 减小] 类型:转载 本篇文章是对C语言中的文件操作函数进行了详细的总结分析,需要的朋友参考下   fopen(打开文件)相关函数 open,fc ...

  8. C语言文件操作 FILE结构体

    内存中的数据都是暂时的,当程序结束时,它们都将丢失.为了永久性的保存大量的数据,C语言提供了对文件的操作. 1.文件和流 C将每个文件简单地作为顺序字节流(如下图).每个文件用文件结束符结束,或者在特 ...

  9. C语言文件操作相关函数

    在实际应用中,我们往往需要对文件进行操作,下面我将介绍C语言的一些关于操作文件的函数. 一.计算机文件 计算机文件是以计算机硬盘为载体存储在计算机上的信息集合,是存储在某种长期储存设备上的一段数据流. ...

随机推荐

  1. Android源代码解析之(七)--&gt;LruCache缓存类

    转载请标明出处:一片枫叶的专栏 android开发过程中常常会用到缓存.如今主流的app中图片等资源的缓存策略通常是分两级.一个是内存级别的缓存,一个是磁盘级别的缓存. 作为android系统的维护者 ...

  2. UVA 11294 - Wedding(Two-Set)

    UVA 11294 - Wedding 题目链接 题意:有n对夫妻,0号是公主.如今有一些通奸关系(男男,女女也是可能的)然后要求人分配在两側.夫妻不能坐同一側.而且公主对面一側不能有两个同奸的人,问 ...

  3. 基于MySQL元数据的Hive的安装和简单測试

    引言: Hive是一种强大的数据仓库查询语言,类似SQL,本文将介绍怎样搭建Hive的开发測试环境. 1. 什么是Hive? hive是基于Hadoop的一个数据仓库工具,能够将结构化的数据文件映射为 ...

  4. Double 与 Float 的值的比較结果

    首先看geeksforgeeks上的两个程序: 程序1: #include<stdio.h> int main() { float x = 0.1; if (x == 0.1) print ...

  5. poj 2488 A Knight&#39;s Journey(dfs+字典序路径输出)

    转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://poj.org/problem? id=2488 ----- ...

  6. Server Tomcat v7.0 Server at localhost failed to start.解决办法(图文详解)

    问题描述 Server Tomcat v7.0 Server at localhost failed to start. 解决办法 把你工作空间文件夹下的如下路径打开: <workspace-d ...

  7. 07:清泉-改(prime+堆)

    时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  512000kB 描述 华北电力大学可以抽象为一张有n个点m条边的无向图. 现在所有的边都断了. 修复每条边都有个不同 ...

  8. 使用rman恢复数据小结

    恢复前提有数据备份 以 alter database open resetlogs 开机以后多要做一次全备(以前的备份失效了) 恢复参数文件: restore spfile from '/home/o ...

  9. keepalived的功能及DR模式搭建笔记

    一.HA集群中的相关术语 1.节点(node) 运行HA进程的一个独立主机,称为节点,节点是HA的核心组成部分,每个节点上运行着操作系统和高可用软件服务,在高可用集群中,节点有主次之分,分别称之为主节 ...

  10. 从A小程序跳转到B小程序

    从A小程序跳转到B小程序: A小程序 wxml: <navigator target="miniProgram" open-type="navigate" ...