英文输入法(C 语言)

题目

主管期望你来实现英文输入法单词联想功能,需求如下:

  1. 依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词。
  2. 按字典序输出联想到的单词序列,如果联想不到,请输出用户输入的单词前缀。

注意

  1. 英文单词联想时区分大小写
  2. 缩略形式如"don’t" 判定为两个单词 "don"和 “t”
  3. 输出的单词序列不能有重复单词,且只能是英文单词,不能有标点符号

输入

输入两行
首行输入一段由英文单词word标点构成的语句str
接下来一行为一个英文单词前缀pre
0 < word.length() <= 20
0 < str.length() <= 10000
0 < pre.length() <= 20

输出

输出符合要求的单词序列或单词前缀
存在多个时,单词之间以单个空格分割

示例一

输入
I love you
He
输出
He
说明

用户已输入单词语句"I love you",
中提炼出"I","love","you"三个单词
接下来用户输入"He"
从已经输入信息中无法联想到符合要求的单词
所以输出用户输入的单词前缀

示例一

输入
The furthest distance in the world,Is not between life and death,But when I stand in front or you,Yet you don't know that I love you.
f
输出
front furthest

代码

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>// 定义最大字符串长度常量
#define MAX_LEN 10001// 自定义比较函数,用于对字符串数组进行排序
int cmp(const void *a, const void *b) {return strcmp((const char *)a, (const char *)b);
}int main() {// 输入的英文语句char str[MAX_LEN];fgets(str, MAX_LEN, stdin);// 去除末尾换行符str[strcspn(str, "\n")] = '\0';// 用户输入的单词前缀char pre[21];scanf("%s", pre);// 将标点符号替换为空格以便处理单词for (int i = 0; str[i] != '\0'; i++) {if (!isalpha(str[i])) {str[i] = ' ';}}// 存储从输入语句中拆分出的所有单词char word[500][21];int count = 0;// 使用strtok函数分割字符串为单词char *token = strtok(str, " ");while (token != NULL) {strcpy(word[count++], token);token = strtok(NULL, " ");}// 存储与用户输入前缀匹配的单词char res[500][21];int res_count = 0;// 遍历所有单词,查找以pre为前缀的单词并存入res数组for (int i = 0; i < count; i++) {if (strncmp(word[i], pre, strlen(pre)) == 0) {strcpy(res[res_count++], word[i]);}}// 如果没有找到任何匹配的单词,则输出用户输入的单词前缀if (res_count == 0) {printf("%s\n", pre);return 0;}// 对匹配到的单词按字典序进行排序qsort(res, res_count, sizeof(res[0]), cmp);// 输出排序后的单词序列for (int i = 0; i < res_count; i++) {printf("%s ", res[i]);}// 输出最后一个单词后不带空格printf("\n");return 0;
}

注意

1、标点符号的去除

 // 将标点符号替换为空格for (int i = 0; str[i] != '\0'; i++) {if (!isalpha(str[i])) {str[i] = ' ';}}

在这里插入图片描述
去除标点符号
在这里插入图片描述

2、cmp(const void *a, const void *b) {

// 自定义比较函数,用于对字符串数组进行排序
int cmp(const void *a, const void *b) {return strcmp((const char *)a, (const char *)b);
}

这段代码定义了一个名为 cmp 的函数,用于自定义排序规则。这个函数主要用于配合 C 语言标准库中的 qsort 函数对数组进行排序。

函数原型为:

int cmp(const void *a, const void *b);

参数说明:

  • const void *aconst void *b:这两个指针参数分别指向要比较的元素在数组中的地址,由于 qsort 函数通用性很强,它可以处理任何类型的数据,所以这里使用了 void* 类型,表示不指定具体类型。

在这个函数内部:

return strcmp((const char *)a, (const char *)b);

将两个 void* 类型的指针强制转换为 const char* 类型,这是因为我们的实际数据是字符串,需要调用 strcmp 函数来进行比较。strcmp 是 C 标准库提供的一个函数,用于比较两个字符串的大小(按字典顺序),返回值为:

  • 如果 a 字符串小于 b 字符串,则返回负数;
  • 如果 a 字符串等于 b 字符串,则返回 0;
  • 如果 a 字符串大于 b 字符串,则返回正数。

因此,cmp 函数实现了对传入的两个字符串按照字典序进行比较的功能,qsort 函数会根据这个比较结果来对包含字符串的数组进行升序排列。在本题中,我们使用 cmp 函数对找到的所有以给定前缀开头的单词数组进行排序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/697628.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java设计模式 | 七大原则之单一职责原则

一、单一职责原则 基本介绍 对类来说&#xff0c;一个类应该只负责一项原则&#xff0c;如类A负责两个不同职责&#xff1a;职责1&#xff0c;职责2。当职责1需求变更而改变A时&#xff0c;可能造成职责2执行错误&#xff0c;所以需要将类A的粒度分解为A1&#xff0c;A2。 注…

玩主机游戏能省去不少烦恼?+主机该购买哪台?

文/嘉兰SK 来到次世代&#xff0c;玩家们最关心的问题逐渐变成了购买的游戏能否支持升级。 各个游戏厂商也没有闲着。 此前还有标准版、黄金版、终极版、决定版等一系列。 想出很多招数。 于是很多新玩家开始疑惑&#xff1a;你们都说玩主机游戏可以省去很多麻烦&#xff0c;可…

每天一个知识点 - 如何快速熟悉后端项目

入职一家新公司的时候&#xff0c;不可避免的就是接触到新公司的项目&#xff0c;有些项目一启动就是好几年&#xff0c;业务功能极其复杂&#xff0c;下面我总结几个方法让大家快速熟悉后端项目&#xff08;图文结合&#xff09; 用例图简析 用例是系统中的一个功能单元&…

springboot网站开发02-接入持久层框架mybatisPlus

springboot网站开发02-接入持久层框架mybatisPlus&#xff01;经过上一小节内容分享&#xff0c;我们的项目嵌套模式框架搭建好了&#xff0c;下面就是开始编辑具体的业务代码了&#xff0c;我们使用到了持久层框架是mybatisPlus插件。下面是一些具体的植入框架的操作步骤。 第…

Python 光速入门课程

首先说一下&#xff0c;为啥小编在即PHP和Golang之后&#xff0c;为啥又要整Python&#xff0c;那是因为小编最近又拿起了 " 阿里天池 " 的东西&#xff0c;所以小编又不得不捡起来大概五年前学习的Python&#xff0c;本篇文章主要讲的是最基础版本&#xff0c;所以比…

DT DAY3 信号和槽

作业&#xff1a; 1> 思维导图 2> 使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 btn3 new QPushButton("按钮3",this);btn3->resize(ui->btn2->width(),ui->b…

研发流程图

1、需求评审流程 2、用例评审流程 3、代码评审流程 4、产品功能上线流程

排序算法整理

排序种类排序特性代码背景 基于插入的排序直接插入排序原理代码 折半查找排序2路查找排序希尔排序(shell) 缩小增量排序原理代码 基于交换的排序冒泡排序原理代码 快速排序&#xff08;重要!&#xff09;原理我的思考 代码 基于选择的排序&#xff08;简单&#xff09;选择排序…

Spark之【基础介绍】

Spark最初是由美国伯克利大学AMP实验室在2009年开发&#xff0c;Spark时基于内存计算的大数据并行计算框架&#xff0c;可以用于构建大型的、低延迟的数据分析应用程序。 Spark是当今大数据领域最活跃、最热门、最高效的大数据通用计算平台之一。 Spark的特点 运行速度快 &am…

Uniapp + VUE3.0 实现双向滑块视频裁剪效果

效果图 <template><view v-if"info" class"all"><video:src"info.videoUrl"class"video" id"video" :controls"true" object-fit"fill" :show-fullscreen-btn"false"play-btn…

sylar高性能服务器-日志(P30-P35)内容记录

文章目录 P30-P32&#xff1a;协程调度01-03一、Scheduler局部变量FiberAndThread&#xff08;任务结构体&#xff09;成员变量调度协程构造函数析构函数startstoprunstopping 二、参考资料 P33-P35&#xff1a;协程调度04-06一、测试1二、测试2 总结 P30-P32&#xff1a;协程调…

开源博客项目Blog .NET Core源码学习(9:Autofac使用浅析)

开源博客项目Blog使用Autofac注册并管理组件和服务&#xff0c;Autofac是面向.net 的开源IOC容器&#xff0c;支持通过接口、实例、程序集等方式注册组件和服务&#xff0c;同时支持属性注入、方法注入等注入方式。本文学习并记录Blog项目中Autofac的使用方式。   整个Blog解…

LED景观照明灯驱动电路串联、并联和恒流3款方案

LED景观照明灯是现代城市照明中常见的一种灯具。为了保证LED景观照明灯的正常工作&#xff0c;需要设计合适的驱动电路。LED景观照明灯的驱动电路可以采用串联、并联或恒流的方式来设计。 首先&#xff0c;串联驱动电路是指将多个LED灯串联在一起&#xff0c;然后接入电源进行…

【Spring】常见问题总结

目录 1. 什么是 Spring 框架? 2. 列举一些重要的Spring模块&#xff1f; 3. RestController vs Controller 4. Spring IOC & AOP 4.1 谈谈自己对于 Spring IoC 和 AOP 的理解 IoC AOP 4.2 Spring AOP 和 AspectJ AOP 有什么区别&#xff1f; 5. Spring bean 5.1…

C语言第二十九弹---浮点数在内存中的存储

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 目录 1、浮点数在内存中的存储 1.1、练习 1.2、浮点数怎么转化为二进制 1.3、浮点数的存储 1.3.1、浮点数存的过程 1.3.2、浮点数取的过程 1.3、题目解析…

FPGA领域顶级学术会议

FPGA领域顶级学术会议主要有FPGA,FCCM,FPL和FPT。 1 FPGA 会议全名是: ACM/SIGDA International Symposium on Field-Programmable Gate Arrays 网站是:https://dl.acm.org/conference/fpga FPGA常年在美国举办,每年2月,偏FPGA基础研究; 该会议的论文免费下载。这个比…

【MATLAB源码-第144期】基于matlab的蝴蝶优化算法(BOA)无人机三维路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 ​蝴蝶优化算法&#xff08;Butterfly Optimization Algorithm, BOA&#xff09;是基于蝴蝶觅食行为的一种新颖的群体智能算法。它通过模拟蝴蝶个体在寻找食物过程中的嗅觉导向行为以及随机飞行行为&#xff0c;来探索解空间…

vue3前端项目开发,具备纯天然的防止爬虫采集的特征

vue3前端项目开发,具备纯天然的防止爬虫采集的特征&#xff01;众所周知&#xff0c;网络爬虫可以在网上爬取到一些数据&#xff0c;很多公司&#xff0c;为了自己公司的数据安全&#xff0c; 尤其是web端项目&#xff0c;不希望被爬虫采集。那么&#xff0c;您可以使用vue技术…

代码随想录算法训练营29期|day59 任务以及具体安排

第九章 动态规划part16 583. 两个字符串的删除操作 // dp数组中存储word1和word2最长相同子序列的长度 class Solution {public int minDistance(String word1, String word2) {int len1 word1.length();int len2 word2.length();int[][] dp new int[len1 1][len2 1];for …

Gartner信息图:2024 年44种安全和风险管理技术采用路线图

Gartner发布的该信息图确定了全球企业正在采用的 44 种安全相关技术&#xff0c;并根据采用阶段、部署风险和企业价值对它们进行了映射。安全和风险管理领导者可以使用此信息图将他们的技术投资与同行进行比较。 2024 年安全和风险管理技术采用路线图 SRM 领导者可以使用此信息…