专做母婴食品的网站/新产品的推广销售方法
题目来自于博主算法大师的专栏:最新华为OD机试C卷+AB卷+OJ(C++JavaJSPy) https://blog.csdn.net/banxia_frontend/category_12225173.html
题目
主管期望你来实现英文输入法单词联想功能,需求如下:
- 依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词。
- 按字典序输出联想到的单词序列,如果联想不到,请输出用户输入的单词前缀。
注意
- 英文单词联想时区分大小写
- 缩略形式如"don’t" 判定为两个单词 "don"和 “t”
- 输出的单词序列不能有重复单词,且只能是英文单词,不能有标点符号
输入
输入两行
首行输入一段由英文单词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 *a
和const 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
函数对找到的所有以给定前缀开头的单词数组进行排序。
相关文章:

英文输入法(C 语言)
题目来自于博主算法大师的专栏:最新华为OD机试C卷AB卷OJ(CJavaJSPy) https://blog.csdn.net/banxia_frontend/category_12225173.html 题目 主管期望你来实现英文输入法单词联想功能,需求如下: 依据用户输入的单词前…...

万众一心 · 喜赢未来,2023宇凡微年会暨阳朔之旅
宇凡微 万众一心 喜赢未来 2024宇凡微年会暨阳朔之旅 在一起,做时间的朋友,迈向第一 前言 INTRODUCTION 感恩宇凡微过去七年砥砺路,携手宇凡微未来七年新征程。2024年1月24日~1月27日,宇凡微在广西桂林阳朔举办了以“感恩有…...

【Spring】 AOP面向切面编程
文章目录 AOP是什么?一、AOP术语名词介绍二、Spring AOP框架介绍和关系梳理三、Spring AOP基于注解方式实现和细节3.1 Spring AOP底层技术组成3.2 初步实现3.3 获取通知细节信息3.4 切点表达式语法3.5 重用(提取)切点表达式3.6 环绕通知3.7 切…...

R语言入门笔记2.6
描述统计 分类数据与顺序数据的图表展示 为了下面代码便于看出颜色参数所对应的值,在这里先集中介绍, col1是黑色,2是粉红,3是绿色,4是天蓝,5是浅蓝,6是紫红,7是黄色,…...

PS人像处理磨皮插件
PS人像处理插件 Portraiture 人像照片进行自动磨皮和平滑处理Arcsoft Portrait 3 自动化人像磨皮软件 批量处理功能DR增强插件 含有磨皮滤镜Beautify Panel 高级质感磨皮插件PT Portrait 人像检测自动完成磨皮优化Retouch4me AI智能人能磨皮美容软件 1、Retouch4me_Heal…...

类型转换(C++)
一、C语言中的类型转换 在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与 接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型 …...

2.23数据结构
单向循环链表 创建单向循环链表,创建节点 ,头插,按位置插入,输出,尾删,按位置删除功能 //main.c #include "loop_list.h" int main() {loop_p Hcreate_head();insert_head(H,12);insert_head(…...

c++笔记理解
1.封装 (1)构造函数不是必须在的 可以通过行为修改属性 (2)private和protected区别在于继承那里要学 (3)类默认是私有,struct是共有 私有的好处:控制数据的有效性,意…...

二进制部署k8s集群之cni网络插件
目录 k8s的三种网络模式 pod内容器之间的通信 同一个node节点中pod之间通信 不同的node节点的pod之间通信 flannel网络插件 flannel的三种工作方式 VxLAN host-GW UDP Flannel udp 模式 Flannel VXLAN 模式 flannel插件的三大模式的总结 calico网络插件 k8s 组网…...

二维矩阵子集的最大值
登录—专业IT笔试面试备考平台_牛客网 正好遇到了 对于一维,我们只需要贪一次 int ans -1E9; int suf -1E9; for (int i 0; i < n; i) {if (i && (a[i] - a[i - 1]) % 2 0) {suf 0;}suf std::max(suf, 0) a[i];ans std::max(ans, suf); } ans就是最大值…...

瑞_23种设计模式_装饰者模式
文章目录 1 装饰者模式(Decorator Pattern)1.1 介绍1.2 概述1.3 装饰者模式的结构 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 JDK源码解析5 总结5.1 装饰者模式的优缺点5.2 装饰者模式的使用场景5.3 装饰者模式 VS 代理模式 &#x…...

使用Python制作进度条有多少种方法?看这一篇文章就够了!
前言 偶然间刷到一个视频,说到:当程序正在运算时,会有一个较长时间的空白期,谁也不知道程序运行的进度如何,不如给他加个进度条。 于是我今个就搜寻一下,Python版的进度条都可以怎么写! 送书…...

SpringBoot-2.7.6基于SLF4J日志门面的日志框架切换
SpringBoot 没有强制性的日志记录依赖项,但 Commons Logging API 除外,它通常由 Spring Framework 的模块提供。 要使用 Logback,您需要将其包含在类路径中。 推荐的方法是您只需要通过启动器,这都取决于 . 对于 Web 应用程序 ,因为它可传递地依赖于日志记录启动器。 如果…...

MongoDB聚合运算符:$binarySize
$binarySize聚合运算符返回给定字符串或二进制数据的字节数。 语法 { $binarySize: <string or binData> }使用 <string or bindData>可以是任何能够被解析为字符串和二进制数据的表达式;如果表达式解析为null,则$binarySize也返回null&a…...

Android的ViewModel
前言 在Compose的学习中,我们在可组合函数中使用rememberSaveable保存应用数据,但这可能意味着将逻辑保留在可组合函数中或附近。随着应用体量不断变大,您应将数据和逻辑从可组合函数中移出。 而在之前的应用架构学习中&…...

Android 圆环带刻度条进度动画效果实现
效果图 需求是根据传感器做一个重力球效果,先实现了动画后续加上跟传感器联动. 又是摆烂的一天, 尚能呼吸,未来可期啊 View源码 package com.android.circlescalebar.view;import android.content.Context; import android.content.res.Typ…...

94. 二叉树的中序遍历
// 定义一个名为Solution的类,用于解决二叉树的中序遍历问题 class Solution { // 定义一个公共方法,输入是一个二叉树的根节点,返回一个包含中序遍历结果的整数列表 public List<Integer> inorderTraversal(TreeNode root) { // …...

汽车信息安全概述
随着智能网联汽车的迅猛发展,车辆不再是简单的交通工具,而是集数据收集、处理与通信于一体的移动智能终端。然而,这一变革也使得汽车成为黑客攻击的新目标。汽车信息安全问题日益凸显,成为行业关注的焦点。本文将深入探讨汽车信息…...

Linux——基础IO
📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、C语言IO1、写文件2、读文件3、stdin & stdout & stderr 二、系统文件I/O1、写文件…...

数据结构-数组
一,数组基础及注意事项 1,用来储存一组相同的类型的数据. 2,在内存中,分配连续的空姐,数组创建时要指定容量(大小). 3,创建格式: 数据类型 []数组名 int[] arr new int[10] int[] arr2 {1,2,3,4}. 4,索引--访问数组时通过索引进行操作. (注意:一定要理解索引的含义,在数据结…...

【Java程序设计】【C00279】基于Springboot的智慧外贸平台(有论文)
基于Springboot的智慧外贸平台(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的智慧外贸平台 本系统分为系统功能模块、管理员功能模块、买家功能模块以及商家功能模块。 系统功能模块:在平台首页可以…...

C#,计算几何,计算机图形学(Computer Graphics)洪水填充算法(Flood Fill Algorithm)与源代码
1 泛洪填充算法(Flood Fill Algorithm) 泛洪填充算法(Flood Fill Algorithm) ,又称洪水填充算法,是在很多图形绘制软件中常用的填充算法,最熟悉不过就是 windows 自带画图软件的油漆桶功能。 2 源程序 using System; using System.Collecti…...

C# 实现网页内容保存为图片并生成压缩包
目录 应用场景 实现代码 扩展功能(生成压缩包) 小结 应用场景 我们在一个求职简历打印的项目功能里,需要根据一定的查询条件,得到结果并批量导出指定格式的文件。导出的格式可能有多种,比如WORD格式、EXCEL格式、PDF格式等,…...

C#_事件简述
事件模型简述 C#中事件的运行模式为"发布订阅模型",事件触发者称为"发布者",事件处理者称为"订阅者" 事件模型的五个组成部分 事件(成员)事件的拥有者(类/对象)事件的响应…...

C语言:指针(一)
目录 1.内存和地址2. 指针变量和地址2.1 取地址操作符(&)2.2 指针变量和解引用操作符(*)2.2.1 指针变量2.2.2 解引用操作符(*) 2.3 指针变量的大小 3.指针变量的类型和意义3.1 指针的解引用3.2 指针 -指…...

【leetcode刷题之路】面试经典150题(3)——哈希表+区间
文章目录 5 哈希表5.1 【哈希表】赎金信5.2 【数学】同构字符串5.3 【数学】单词规律5.4 【哈希表】有效的字母异位词5.5 【哈希表】字母异位词分组5.6 【双指针】两数之和5.7 【数学】快乐数5.8 【哈希表】219. 存在重复元素 II5.9 【数学】最长连续序列 6 区间6.1 【数学】汇…...

群晖NAS DSM7.2.1安装宝塔之后无法登陆账号密码问题解决
宝塔的安装就不在这赘述了,只说下,启动之后默认账号密码无法登陆的问题。 按照上面给出的账号密码,无法登陆 然后点忘记密码,由于是docker安装的,根目录下没有/www/server/panel 。 也没有bt命令 要怎么修改呢。 既然…...

9、使用 ChatGPT 的 GPT 制作自己的 GPT!
使用 ChatGPT 的 GPT 制作自己的 GPT! 想用自己的 GPT 超越 GPT ChatGPT 吗?那么让我们 GPT GPT 吧! 山姆 奥特曼利用这个机会在推特上宣传 GPTs 的同时还猛烈抨击了埃隆的格罗克。 GPTs概览 他们来了! 在上周刚刚宣布之后,OpenAI 现在推出了其雄心勃勃的新 ChatGPT…...

企业微信应用开发:使用Cpolar域名配置进行本地接口回调的调试指南
文章目录 1. Windows安装Cpolar2. 创建Cpolar域名3. 创建企业微信应用4. 定义回调本地接口5. 回调和可信域名接口校验6. 设置固定Cpolar域名7. 使用固定域名校验 企业微信开发者在应用的开发测试阶段,应用服务通常是部署在开发环境,在有数据回调的开发场…...

js 可选链运算符(?.)空值合并运算符(??)逻辑空赋值运算符(??=)
可选链运算符(?.)允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。?. 运算符的功能类似于 . 链式运算符,不同之处在于,在引用为空 (nullish ) (null 或者 undefined) 的情况下不会引起…...