如何徒手搓出一个命令行版的成语词典

2024-01-14 20:12

本文主要是介绍如何徒手搓出一个命令行版的成语词典,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

极度无聊,写点代码.

于是整了个成语词典.从网上搜索了个成语典库,手动修正了格式,方便从fscanf中读取.

本来想使用三个%s直接读取,看来我想得太简单了,里面有空格不行,于是想到fscanf有正则表达式方法,于是展开的无敌的网络搜索,终于整了个表达式

           

st=fscanf(fp,"%s%*[^\[]\[%[^\]]\]%*[^#]#%[^\n]",s1,s2,s3);
//使用正则表达式提取字符串  
//沐雨经霜 [mù yǔ jīng shuāng] #指承受雨淋霜打.形容历尽辛苦.出处:无示例:无
//s1 通过第一个%s提取
//s2 通过%*[^\[]\[%[^\]]\]提取,表达式分解为这部分%*[^\[]和\[和%[^\]]和\],加反斜杠为了转义,表示跳过[部分,提取中括号里的内容
//s3 通过%*[^#]#%[^\n]提取,表示跳过#提取换行符之间的内容

初始化字典存入一个向量中

bool init_dict(vector <INFO> &dc)
{FILE *fp=NULL;fp=fopen("utf8_words.txt","r");if(fp) {int st=0;do {char s1[100],s2[500],s3[1024];//使用正则表达式提取字符串//沐雨经霜 [mù yǔ jīng shuāng] #指承受雨淋霜打.形容历尽辛苦.出处:无示例:无//s1 通过第一个%s提取//s2 通过%*[^\[]\[%[^\]]\]提取,表达式分解为这部分%*[^\[]和\[和%[^\]]和\],加反斜杠为了转义,表示跳过[部分,提取中括号里的内容//s3 通过%*[^#]#%[^\n]提取,表示跳过#提取换行符之间的内容st=fscanf(fp,"%s%*[^\[]\[%[^\]]\]%*[^#]#%[^\n]",s1,s2,s3);//printf("st=%d\n",st);if(st==3) {//printf("s1:%s,s2:%s,s3:%s\n",s1,s2,s3);INFO item;item.idiom=s1;item.pinyin=s2;item.detail=s3;dc.push_back(item);}} while(st==3);fclose(fp);return !dc.empty();}return false;
}

通过简易遍历查找字典

    vector<int> v;if(find_hziv(dict,srh,v)) {size_t sz=v.size();for(uint32_t i=0; i<sz; i++) {printf("[%s,%d/%d]:%s %s\n     %s\n\n\n",sf.c_str(),i+1,sz,dict[v[i]].idiom.c_str(), dict[v[i]]. pinyin.c_str(), dict[v[i]].detail.c_str());}}else{printf("not found\n");}

简单成语接龙

//成语接龙int istart=0,idx=0;string t4;int cr=0;vector <int> list;while(find_hz1(dict,istart,sf,idx,t4)) {bool same=false;for(size_t e=0; e<list.size(); e++) {if(list[e]==idx) {same=true;istart=idx+1;}}if(!same) {cr++;list.push_back(idx);if(cr>4) {cr=0;putchar('\n');}sf=t4;}}

由于WIN32命令行是GBK所以进入命令行要代码页和转入内容转化为UTF8,才能正常显示汉字

        system("chcp 65001"); string sf=cvt_gbk_to_utf8(p[1]);

运行程序格式

idict 成语或部分关键字 

idict 单字 

idict 单字 (1开始的序号)

编译方式g++ idict.cpp -oidict

下载代码链接:https://pan.baidu.com/s/1daU8XXXQ5m8epGJ6ZOgMjw?pwd=tptk 
 

这篇关于如何徒手搓出一个命令行版的成语词典的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/606382

相关文章

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

C++入门(05-2)从命令行执行C++编译器_GCC

文章目录 GCC编译器1. 下载MinGW-w64,安装(不推荐)2. 使用MSYS2安装MinGW-w64(推荐)2.1 安装MSYS22.2 初始化和更新2.3 安装MinGW-w64编译器2.3 在MSYS2 Shell中导航到代码目录2.4 使用 g++ 编译2.5 运行可执行文件 GCC编译器 GCC(GNU Compiler Collection)是一个开源编译器集

C++入门(05)从命令行执行C++编译器_MSVC

文章目录 1.C++ 编译器2. 常用 C++ 编译器MSVC(Microsoft Visual C++)GCC(GNU Compiler Collection)Clang 3. MSVC 编译器3.1 开发者命令提示符3.2 编译 C++ 代码 1.C++ 编译器 将C++源代码(扩展名为 .cpp )转换成计算机可以运行的可执行程序 编译器会检查代码的语法和语义,生成相应

ffmpeg使用安装使用教程(命令行-Python)

安装教程 https://blog.csdn.net/yuanmomoya/article/details/141992114 ffmpeg转换操作视频十分的占用cpu,会把cpu打满,线上使用的话需要注意下 命令行操作 一、视频转码 将视频从一种格式转换为另一种格式: ffmpeg -i input_video.mp4 output_video.avi 这将把输入的 MP4

mac命令行启动tomcat 修改tomcat端口号

1、进入的Tomcat安装/bin 目录下 直接拖动bin文件夹到终端,前面加cd 即:cd / Library / Tomcat / bin  2、启动tomcat 输入:sudo sh ./startup.sh 3、关闭Tomcat 关闭:sudo sh ./shutdown.sh   4、修改tomcat端口号 安装目录/conf/server.xml 文件夹下

5万成语词典大全含英文ACCESS\EXCEL数据库

关于成语词典的发现和采集有些无止尽的意思,刚开始发现了13000条的两种成语字典《最完整的成语字典ACCESS数据库》,接着发现了《3万多条成语字典ACCESS数据库》,而现在的这个却是近5万。 成语内容包含:成语、拼音、解释、出处、示例、近义词、反义词、语法、英文等。当然看截图也可以看出并不是所有成语都有近义词、反义词、语法、英文数据内容的,有些成语这些内容是为空的。 截图下方有显示“共

Maven的初步使用以及命令行工具

在写本文的时候先来说明一下maven依赖的各种范围的意思 compile(编译范围) compile 是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在所有的classpath 中可用,同时它们也会被打包。 provided(已提供范围)provided 依赖只有在当JDK 或者一个容器已提供该依赖之后才使用。例如,如果你开发了一个web 应用,你可能在编译cl

rust 命令行工具rsup管理前端npm依赖

学习了一年的 rust 了,但是不知道用来做些什么,也没能赋能到工作中,现在前端基建都已经开始全面进入 rust 领域了,rust 的前端生态是越来越好。但是自己奈何水平不够,想贡献点什么,无从下手。 遂想自己捣鼓个什么东西,可以帮助到日常工作的。 记录一下在完成功能时遇到的一些问题,以及是怎么解决的。 解决的需求 公司有很多项目,都是依赖公司技术部门的一个框架,虽然说不行,但还是要用,里

递归删除某类文件(命令行实现)

有时候我们需要在某目录下,删除某一类文件,例如:所有的png图片。 Linux做法:find和rm命令 find . –name “*.png” –type f –print –exec rm –rf {} \;man find 各参数的含义可以使用man find命令从帮助文档来查看 删除效果如下: Dos/windows做法:del或者erase命令