• 利用C++开发一个迷你的英文单词录入和测试小程序-增强功能


    小玩具基本完成之后,在日常工作中,记录一些单词,然后定时再复习下,还真的有那么一点点用(毕竟自己做的小玩具)。

    在使用过程中,遇到不认识的单词,总去翻译软件翻译,然后录入中文,这样的话,太繁琐了。可以在录入英文单词的时候,自动从网上查询单词的中文含义,便于录入,或者直接协助录入。

    下面我们一步一步来增强小工具的功能

    调查API接口

    这里简单的查询了翻译api的一些接口,有道的最简单,也不要注册,账户,直接按固定格式去请求,返回的是json,正好使用

    这里主要是看了下有道的api接口,返回json,直接用。

    http 请求

    发起http请求,这里推荐Neget上能一键安装的,vcpkg有些也可以,但是可能跟环境有关,到时候编译可能会失败。这里推荐微软的cpprestsdk。既能熟悉modem C++,又能对微软的ppl了解一点点。

    先安装cpprestsdk,Nuget 安装只要点击安装即可

    组合起来

    api有了,c++发起http请求的库也有了,剩下的就是堆代码了。找一个restsdk 的例子来改,官方网站上是写入http文件,这里直接请求,然后处理json数据,并且最终打印到控制台。

    以下是把单词封装成一个异步函数

    很简单,chrome 浏览器,把request header 搞出来,对应着撸代码即可。完成了之后再插入模式里面,收到word 候立即启动这个异步任务

    关于字符编码的问题

    std::cin, win ,的字符编码,为了使用restsdk,可能经常要在各个字符集之间转换

    这里举例两个场景,并且给出一般的解决思路:

    • http的parameter 是url encode

    直接找restsdk的文档,已经有encode的函数,直接拿来用,但是有一点要注意,builder构建的时候会再次编码(默认参数)

    • GB2312转UTF-8

    这里有两个方法,使用windows 提供的api ,MultiByteToWideChar,WideCharToMultiByte

    自行百度

    这里推荐使用iconv这个库,方便跨平台。

    在windows 上使用iconv有两种方法: 编译链接;dll直接加载的方式

    这里简单封装一个dll helper的类

    采用模版模式,基类只加载dll文件,在派生类里面提取具体的函数,直接参考iconv的头文件拷贝过来,加上*,以及typef ,最终在定义类的转发函数即可。

    关键函数如下

    类有了,封装一个函数来使用,直接用GPT 找一个iconv的例子,把对应的函数转换成成员函数

    一切都好了,搞个例子跑下看看

    来看看最终的效果

    再也不用去翻译软件查询单词含义了。

  • 相关阅读:
    【leetcode】【剑指offer Ⅱ】046. 二叉树的右侧视图
    java中转义字符的源码数据格式,内存存储数据格式和转换json后的数据格式
    clip代码安装实操
    用opencv实现人脸识别(5)
    源码解读之FutureTask如何实现最大等待时间
    Java Stream & Reactor
    TableUtilCache:针对CSV表格进行的缓存
    朴素贝叶斯分类器 #数据挖掘 #Python
    聊一聊异构系统间数据一致性
    21年-05-自研-自我准备
  • 原文地址:https://blog.csdn.net/lvronglee/article/details/133273085