多的不说,直接上代码:

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

 #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. leveldb学习:sstable(2)

    block写入:block_builder block.h和.cc里定义了block的entry存储格式和restart,提供了entry的查找接口以及迭代器.那么怎样往写block里写entry呢? ...

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

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

  3. Android学习路线(十三)Activity生命周期——暂停和恢复(Pausing and Resuming )一个Activity

    在正常使用应用的过程中.前台的activity在一些时候会被其它的组件遮挡,导致这个activity暂停.举个样例.当一个半透明的activity被打开(比如一个dialog样式的activity), ...

  4. java大数类,两个不超过20位都不为0的十进制字符串相乘,华为笔试题

    import java.math.BigInteger; import java.util.*; import java.io.*; public class Main { public static ...

  5. nyoj--1237--最大岛屿(dfs+数据处理)

    最大岛屿 时间限制:1000 ms  |  内存限制:65535 KB 难度: 描述 神秘的海洋,惊险的探险之路,打捞海底宝藏,激烈的海战,海盗劫富等等.加勒比海盗,你知道吧?杰克船长驾驶着自己的的战 ...

  6. 简单的floyd——初学

     前言: (摘自https://www.cnblogs.com/aininot260/p/9388103.html): 在最短路问题中,如果我们面对的是稠密图(十分稠密的那种,比如说全连接图),计算多 ...

  7. @JsonIgnore忽略属性,返回的json中不包含字段

    @JsonIgnore的使用: 实体类中加@JsonIgnore注解 package com.baidu.entity; import com.fasterxml.jackson.annotation ...

  8. Core Java(一)

    一. 绪 1.软件:按照特定顺序组织的计算机数据和指令的集合. 软件开发:借助开发工具与计算机语言制作软件 2.计算机语言:用于人与计算机通讯的语言 分为机器语言,汇编语言,高级语言 高级语言分为编译 ...

  9. SLAM概念学习之特征图Feature Maps

    特征图(或者叫地标图,landmark maps)利用参数化特征(如点和线)的全局位置来表示环境.如图1所示,机器人的外部环境被一些列参数化的特征,即二维坐标点表示.这些静态的地标点被观测器(装有传感 ...

  10. 计算a-b的差[返回BigDecimal 类型]

    /*** * 返回 a-b 的差 [返回 BigDecimal 类型] * @param a 被减数 * @param b 减数 * @return */ public static BigDecim ...