表情串转换
前言
NWAFU 2021阶段二 D
一、题目描述
题目描述
在一个字符串中,设置了由‘/’前导字符和某些特定字母构成的转义子字符串,如“/s”、“/f”、“/c”等用于表示特殊表情符号。现要求编写一个函数,将给定字符串中的转义字符串转换为表情字符串,同时其他字符保持不变,然后返回转换后的字符串首地址。需要转义的符号串仅有以下4个:
| 原字符串中的特殊符号子串 | 要转成的表情串 | 含义 |
| /s | ^_^ | 微笑 |
| /f | @_@ | 困惑 |
| /c | T_T | 哭泣 |
| /z | ^_~ | 眨眼 |
函数原型规定为: int ConvertEmoji(char **dst,const char *src);
其中dst是指向转换后的带有表情串的字符串指针的指针,src是指向需要转换的原始字符串指针。函数返回的是转换后的字符串的长度。
特别说明,转换后的字符串长度长短不一,所以需要在函数中根据需要给dst所指向的转换目标字符串分配内存。函数调用结束后,需自行释放该内存。
提交时,只提交ConvertEmoji()及其调用的自定义函数的实现代码。
#include <stdio.h> //注意:原内容h后面多打了空格,需要删除
#include <stdlib.h>
#include <string.h>#define N 64int ConvertEmoji(char **dst, const char *src);int main()
{char str[N], *p = NULL;int len, i = 0;fgets(str, N, stdin);while(i < strlen(str)) {if (str[i]=='\n') { str[i]='\0';break;}i++;}len=ConvertEmoji(&p, str);printf("(%d)%s\n", len, p);free(p);return 0;
}
二、设计步骤
这道题的核心思路与“删除子串”一题大同小异,都是通过字符串的移动实现对其的修改操作。我们引入两个子函数,分别用来计算操作后字符串的长度和对字符串进行唯一操作。OperateArr()函数通用。
题目中有一句话:特别说明,转换后的字符串长度长短不一,所以需要在函数中根据需要给dst所指向的转换目标字符串分配内存。函数调用结束后,需自行释放该内存。
事实上并不需要,如果我们将dst作为p对应的二级指针并在子函数中释放了内存,那么p字符串就无法正常输出了,而主程序的最后free(p)会释放p的内存空间,因此不会出现内存泄漏的问题。
该题第六个测试点是{'\n'},如果用strlen()函数会返回1,而OJ系统认为其长度为0,因此我们在程序中添加一个判断条件。
代码实现:
#define EmojiSize 3 //Emoji字符串的长度
#define BaseSize 2 //转义字符串的长度
const int deltSize = EmojiSize - BaseSize; //差值int ConvertEmoji(char **dst, const char *src);
int Count_tar(char base[],const char *p);
void OperateArr(char *Arr,int len,int opt_len);
int ConvertEmoji(char **dst, const char *src)
{int i,j,h;int len = strlen(src);char bas_ch[5] = {'s','f','c','z'}; //在字符串中查找的对象char bas_tar[4][4] = {"^_^","@_@","T_T","^_~"}; //用于替换的子串int dstSize = len + deltSize * Count_tar(bas_ch,src);char *temp = (char *)malloc(dstSize * sizeof(char));if(*src == '\n') //别问,问就是6.out{**dst = '\0';return 0;}strcpy(*dst,src); //拷贝int flag = 0; //已转换的次数i = 0;while(i < dstSize){if(*(*dst+i) == '/'){for(j = 0;j < 4;j++){if(*(*dst+i+1) == bas_ch[j]){flag++;OperateArr((*dst+i+2),len+flag-i-2,deltSize); //使操作部分后面的子字符串位移for(h = 0;h < EmojiSize;h++) //字符串替换{*(*dst+i+h) = bas_tar[j][h];}break;}}}i++;}return dstSize;
}int Count_tar(char base[],const char *p) //计算操作后的字符串长度
{int i = 0,j,count = 0;while(*(p+i) != '\0'){if(*(p+i) == '/'){for(j = 0;j < 4;j++){if(*(p+i+1) == base[j]){count++;break;}}}i++;}return count;
}void OperateArr(char *Arr,int len,int opt_len) //字符串位移函数
{int i,j;char temp;for(i = 0;i < opt_len;i++){temp = *(Arr + len - 1);for(j = len - 1;j > 0;j--){*(Arr+j) = *(Arr + j - 1);}*Arr = temp;}
}
总结
NWAFU 2021阶段二 D
相关文章:
表情串转换
前言 NWAFU 2021阶段二 D 一、题目描述 题目描述 在一个字符串中,设置了由‘/’前导字符和某些特定字母构成的转义子字符串,如“/s”、“/f”、“/c”等用于表示特殊表情符号。现要求编写一个函数,将给定字符串中的转义字符串转换为表情字…...
【娱乐小技巧】网页旋转90° 3步搞定
一、按F12,打开控制台; 二、点击号; 插入新body; 三、粘贴代码 -webkit-transform: rotate(90deg);小结,角度值可以自选; 代码的效果:...
移动管理系统软件哪家好?它是如何帮助企业降本增效的?
现在很多管理系统都可以用移动设备接入,最常见的就是手机。只要给管理系统创建一个微信小程序接口,那么要使用系统功能的时候直接打开微信小程序就可以了。例如我们小区的物业巡检就是通过微信扫码打开巡检工单记录信息的,直接用巡检保安自己…...
电脑表格文件丢失如何找回?3个方法拯救丢失的文件!
“太难了!我辛辛苦苦在电脑上做的表格,不知道什么原因突然就没有了,有什么方法可以找回丢失的表格文件吗?快帮帮我吧!” 在日常工作中,很多电脑用户可能都会用到表格文件,这往往记载了大量的重要…...
VSCode 如何安装插件的历史版本
背景 在日常开发过程中,我们可能会遇到新版VSCode插件存在问题,无法正常工作的情况。这种情况下,一种可行的解决方案就是安装插件的历史版本。VSCode 插件默认安装的都是插件最新的版本,例如下面 vscode-styled-compoents 插件 本…...
关于edge浏览器以及插件推荐
目录 广告拦截和隐私工具 密码管理器 生产力和组织工具 写作和语法工具 购物助手 娱乐和个性化 安全性和VPN 开发者工具 其他实用工具 Microsoft Edge 是一款基于Chromium开源项目的现代网络浏览器,由微软开发。它是Internet Explorer的继任者,…...
Vue Tinymce富文本组件自定义操作按钮
想实现如下效果 首先在init方法中的增加一插件 增加一个setup方法 代码 setup: function(editor) { editor.ui.registry.addButton(testButton, {text: 日记日期,tooltip: 插入日记日期,onAction: () > editor.insertContent("123456")});}, 操作效果࿰…...
论文阅读:Blind Super-Resolution Kernel Estimation using an Internal-GAN
这是发表在 2019 年 NIPS 上的一篇文章,那个时候还叫 NIPS,现在已经改名为 NeurIPS 了。文章中的其中一个作者 Michal Irani 是以色 Weizmann Institute of Science (魏茨曼科学研究学院) 的一名教授,对图像纹理的内在统计规律有着很深入的研…...
韩国Neowine车规认证加密芯片ALPU-CV
由工采网代理的ALPU-CV是韩国Neowine(纽文微)推出的一款高性能车规级加密芯片;也是ALPU系列中的高端IC,该芯片通过《AEC-Q100》认证,目前已经在国产前装车辆配件量产使用,主要用于版权license保护、设备防伪…...
【每日一题】收集巧克力
文章目录 Tag题目来源题目解读解题思路方法一:枚举操作数 写在最后 Tag 【枚举】【数组】【2023-12-28】 题目来源 2735. 收集巧克力 题目解读 有长度为 n, 下标从 0 开始的整数数组 nums, 表示收集不同类型的巧克力的成本. nums[i] 表示收集类型 i 巧克力的成本…...
【开源】基于Vue+SpringBoot的贫困地区人口信息管理系统
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 人口信息管理模块2.2 精准扶贫管理模块2.3 特殊群体管理模块2.4 案件信息管理模块2.5 物资补助模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 人口表3.2.2 扶贫表3.2.3 特殊群体表3.2.4 案件表3.2.5 物资补助表 四…...
八股文打卡day7——计算机网络(7)
面试题:HTTPS和HTTP的区别 我的回答: 1.加密方式:HTTP是明文传输;HTTPS使用了SSL/TLS进行加密传输。 2.安全性:由于HTTP是明文传输的,所以数据内容容易被第三方截获和读取。而HTTPS通过SSL/TLS进行加密传…...
南大通用数据库 GBase 8a 性能调优方法--Hash索引
南大通用数据库--GBase 8a中建立Hash Index 通常可以用来解决等值查询的定位效率,特别是对以单表精确查询为主的应用场景尤为适合,如电信业务中的并发话单查询等(特别是内存基本充足的场景)。 默认创建GLOBAL的哈希索引。创建全局…...
openFeign调用接口时传递表单参数、Json参数、HttpServletRequest对象
目录 一、控制器二、Feign客户端 openFeign调用接口时传递Json参数以及httpservletrequest对象 一、控制器 RestController RequestMapping("test") public class TestController {/*** 用来测试表单参数传递:单个参数*/PostMapping(value "/formD…...
中国人民银行总行原稽核司副司长王书刚一行莅临国鑫走访交流
12月27日,中国人民银行总行原稽核司副司长王书刚一行莅临Gooxi走访交流,Gooxi相关领导、接待人员陪同调研并汇报了公司有关情况。 中国人民银行总行原稽核司副司长王书刚一行莅临国鑫 在座谈会交流环节,Gooxi接待领导对中国人民银行行长期以来…...
单例模式学习
单例模式是应用最广的设计模式之一,也是程序员最熟悉的一个设计模式,使用单例模式的类必须保证只能有创建一个对象。 一、为什么要使用单例? 在开发过程中,很多时候一个类我们希望它只创建一个对象,比如:…...
基于Qt之QChart 图表(优美的曲线图案例)
## 项目演示 平台:ubuntu18.04 Qt版本:QT5.14.2 源码位置GitCode:https://gitcode.com/m0_45463480/QCharts/tree/main ## QChart 图表 自从 Qt 发布以来,给跨平台的用户带来很多便利。在 Qt5.7 之前,Qt 在开源社区版本里没有 Qt Charts(自带的绘图组件库)。这使得像…...
Flink1.17实战教程(第四篇:处理函数)
系列文章目录 Flink1.17实战教程(第一篇:概念、部署、架构) Flink1.17实战教程(第二篇:DataStream API) Flink1.17实战教程(第三篇:时间和窗口) Flink1.17实战教程&…...
WPF 已有资源字典文件,在xaml 里面引用
如果已经有一个资源字典文件(通常具有 .xaml 或 .resx 扩展名),您可以在 XAML 中通过 MergedDictionaries 属性引用它。MergedDictionaries 属性允许您将多个资源字典文件合并到一个资源字典中,以便在 XAML 中使用。 以下是在 XA…...
ImageJ几何测量
文章目录 距离测量批量测量 科研图像和艺术图像在处理上有一个显著的区别,就是有着定量分析的需求,ImageJ也提供了多种几何何亮工具,包括距离和角度。 距离测量 点击菜单栏File->Open Samples,打开一个示例图像Leafÿ…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
