【PTA刷题】 求子串(代码+详解)

news2024/12/24 3:57:40

【PTA刷题】 求子串(代码+详解)

题目

请编写函数,求子串。

函数原型

char* StrMid(char *dst, const char *src, int idx, int len);

说明:函数取源串 src 下标 idx 处开始的 len 个字符,保存到目的串 dst 中,函数值为 dst。若 len 值不正确,则自动修正。若 idx 值不正确,则目的串为空串。

裁判程序

#include <stdio.h>

char* StrMid(char *dst, const char *src, int idx, int len);

int main()
{
    char a[128], b[128];
    int s, n;
    gets(a);
    scanf("%d%d", &s, &n);
    StrMid(b, a, s, n);
    puts(b);
    return 0;
}

/* 你提交的代码将被嵌在这里 */

输入样例1

abcd
1 2

输出样例1

bc

输入样例2

abcd
1 5

注:5 不正确,按 3 处理。

输出样例2

bcd

输入样例3

abcd
-5 2

输出样例3


注:输出为空串。

代码

char* StrMid(char *dst, const char *src, int idx, int len) {
    // 检查参数是否合法
    if (idx < 0) {
        dst[0] = '\0'; // 如果 idx 不正确,将目的串设为空串
    } else {
        int src_len = strlen(src);
        if (idx >= src_len || len <= 0) {
            dst[0] = '\0'; // 如果 idx 超出源串长度或 len 不正确,将目的串设为空串
        } else {
            // 修正 len,确保不超出源串的长度
            if (len > src_len - idx) {
                len = src_len - idx;
            }
            
            // 拷贝子串到目的串
            strncpy(dst, src + idx, len);
            dst[len] = '\0'; // 确保目的串以 null 结尾
        }
    }

解析

这是一个关于字符串操作的题目,我会逐步解释这个函数的实现细节。这个题目是一个C语言函数,其目的是从源字符串中复制一部分到目标字符串中。

首先,让我们看一下这个函数的原型:

char* StrMid(char *dst, const char *src, int idx, int len);

这个函数接受四个参数:

  1. dst:目标字符串,函数将复制的子串存储在这里。
  2. src:源字符串,函数将从这里复制子串。
  3. idx:开始复制的位置。
  4. len:要复制的字符数。

现在,让我们逐步来看这个函数的实现。

首先,函数会检查参数是否合法。如果 idx 小于0,说明开始位置不正确,这时将目标串设为空串。

if (idx < 0) {
    dst[0] = '\0'; // 如果 idx 不正确,将目的串设为空串
}

然后,函数会计算源串的长度,并检查 idx 是否超过了源串的长度或者 len 是否不合法。如果是的话,同样将目标串设为空串。

else {
    int src_len = strlen(src);
    if (idx >= src_len || len <= 0) {
        dst[0] = '\0'; // 如果 idx 超出源串长度或 len 不正确,将目的串设为空串
    }

接下来,如果参数都合法,函数会修正 len 的值,确保不超出源串的长度。

else {
    if (len > src_len - idx) {
        len = src_len - idx;
    }

最后,函数使用 strncpy 函数从源串复制子串到目标串,并确保目标串以 null 结尾。

// 拷贝子串到目的串
strncpy(dst, src + idx, len);
dst[len] = '\0'; // 确保目的串以 null 结尾

最终,函数返回目标串的指针。

return dst;

这个函数的设计考虑了很多情况,确保了参数的合法性,并且在复制过程中进行了必要的修正。如果有任何问题,请随时提问。

在这里插入图片描述

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

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

相关文章

传输层—UDP—校验和

传输层—UDP—校验和 学习一个协议&#xff0c;当然要掌握协议的特性&#xff0c;还需要理解协议报文格式。 UDP UDP 基本特点&#xff1a;无连接、不可靠传输、面向数据报、全双工 UDP报头包含&#xff1a;源端口、目的端口、UDP报文长度、校验和。 UDP载荷中&#xff1a…

微信小程序开始收取短剧保证金

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 从多位短剧从业者处获悉&#xff0c;今日陆续收到微信公众平台发布的保证金缴纳通知&#xff0c;缴费金额从100-1000不等。 有的需要缴纳1000&#xff0c;而有的只需缴纳100元。这个和你GMV来决…

微信小程序:上传图片到别的域名文件下

效果 wxml <!-- 上传照片 --> <view class"addbtn"><view classpic name"fault_photo" wx:for"{{imgs}}" wx:for-item"item" wx:key"*this"><image classweui-uploader_img src"{{item}}"…

VSCode配置记录

1. 修改代码背景颜色 1&#xff09;Shift Command P&#xff0c;搜索框输入&#xff1a;settings.json 2&#xff09;输入配置 {"workbench.colorCustomizations": {"editor.lineHighlightBackground": "#86e9e93d", # 修改鼠标所在行背景色…

[足式机器人]Part2 Dr. CAN学习笔记-数学基础Ch0-8Matlab/Simulink传递函数Transfer Function

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-数学基础Ch0-8Matlab/Simulink传递函数Transfer Function L − 1 [ a 0 Y ( s ) s Y ( s ) ] L − 1 [ b 0 U ( s ) b 1 s U ( s ) ] ⇒ a 0 y ( t ) y ˙ ( t ) b 0 u ( t ) b 1 u ˙ ( t…

(1)(1.5) FrSky telemetry

文章目录 前言 1 设置 2 Turnigy 9XR Pro 前言 FrSky 遥测技术允许你显示 ArduPilot 的信息&#xff0c;如飞行模式、电池电量和错误信息&#xff0c;以及来自 OpenTx 兼容遥控发射机上其他 FrSky 传感器的信息&#xff0c;甚至包括较旧的 X9R 发射机&#xff08;尽管功能较…

Tomcat下载及idea中配置Tomcat(详细图文步骤,建议收藏)

1、Tomcat简介 Tomcat的相关概念: Tomcat是Apache软件基金会一个核心项目&#xff0c;是一个开源免费的轻量级Web服务器&#xff0c;支持Servlet/JSP少量JavaEE规范。 概念中提到了JavaEE规范&#xff0c;那什么又是JavaEE规范呢? JavaEE: Java Enterprise Edition,Java企业…

ubuntu22.04 安装nvidia GPU显卡驱动

下载 https://www.nvidia.com/Download/index.aspx 删除原有的NVIDIA驱动程序 sudo apt-get remove –purge nvidia*禁用nouveau 默认情况下&#xff0c;Ubuntu采用开源的nouveau驱动程序作为Nvidia显卡的驱动&#xff0c;需要将其禁用 打开编辑配置文件&#xff1a; sudo …

最好的猫罐头品牌有哪些?精选的5款口碑好的猫罐头推荐!

对于一个刚入门的养猫小白来说&#xff0c;面对市面上琳琅满目的猫罐头选择确实让人头大。我们总想选到营养价值高的罐头&#xff0c;但又怕猫咪不喜欢吃&#xff0c;也担心选到不安全的产品。 最好的猫罐头品牌有哪些&#xff1f;根据我开宠物店7年的经验&#xff0c;今天我将…

探索AI在CRM中的潜力:智能化客户关系的构建

AI人工智能在CRM系统中的应用有&#xff1a;赋能内容生产、客户服务支持、赋能品牌推广、自动化业务流程、数据分析、辅助科学决策、给出最佳客户联系时间。合理运用CRM系统中AI人工智能助手可以让团队工作事半功倍。 1.内容生产 市场营销活动离不开内容生产&#xff0c;持续…

节日气氛拉满的毛衣~你喜欢吗?

节日氛围感毛衣一眼就心动采用北极绒面料厚实软糯有质感拼接彩点正是氛围感的来源 整件穿上超级显白显气质 随便搭件牛仔裤还是休闲裤 来穿都很亮眼&#xff01;&#xff01;

NFTScan | 12.04~12.10 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2023.12.04~ 2023.12.10 NFT Hot News 01/ NFTScan 与 MintCore 联合推出适用于 NFT 的 Layer2 网络 Mint 12 月 5 日&#xff0c;根据官方消息&#xff0c;NFT 基础设施服务商 NFTScan …

智慧文旅|故宫文旅运营管理大屏,开启智能旅游新篇章

智慧文旅是旅游业的未来发展趋势&#xff0c;它既有利于文化的传承与传播&#xff0c;又能满足人们对旅游体验的需求。智慧文旅的核心理念是结合现代科技与传统文化&#xff0c;打造独特的旅游目的地&#xff0c;让游客在旅行中获得知识的启迪和文化的享受。智慧文旅是旅游业的…

解决PS2022-23版本保存文件时转圈问题(同AdobeXD)

这类问题多是安装了Creative Cloud导致的&#xff0c;这个软件需要登录账号&#xff0c;然后会自动在所有Adobe软件中同步你登录的账号&#xff0c;并开启云服务。 在你卸载了CreativeCloud后&#xff0c;账号模块并没有被卸载&#xff0c;导致Adobe应用自动处于登录状态。 每次…

算法Day29 打印数目

打印数目 Description 小硕有一套字母表arr&#xff0c;其中每个上都刻有一个字母arr[i]。返回小硕可以印出的非空字母序列的数目。 注意&#xff1a;本题中&#xff0c;每个字母只能使用一次。 Input 输入字符串arr 1≤arr.length≤7 Output 输出可打印数目 Sample 代码 imp…

js中分号产生的问题详解,第一次出现分号导致的问题的记录

图示: 现在 这段代码本来是两行,但是格式化后注意下面一行缩进了,代表按一行解析了, 结果: 加上分号后再格式化就自动对齐了,代表按两行解析. 要是按照没有分号进行解析是怎样的? GPT回答: 这段代码是一行 JavaScript 代码&#xff0c;涉及到了 JSON 对象、条件语句和跳转页面…

小程序域名SSL证书能用免费的吗?

众所周知&#xff0c;目前小程序要求域名强制使用https协议&#xff0c;否则无法上线。但是对于大多数开发者来说&#xff0c;为每一个小程序都使用上付费的SSL证书&#xff0c;也是一笔不小的支出。那么小程序能使用免费的SSL证书吗&#xff1f; 答案是肯定的。目前市面上可选…

跨境独立站优势包括哪些?是否值得做呢?

跨境独立站的优势主要包括&#xff1a; 自主品牌建设&#xff1a;独立站可以更好地展示自主品牌形象&#xff0c;提高品牌知名度和美誉度。 独立域名&#xff1a;独立站可以拥有自己的域名&#xff0c;更加稳定和可信。 自主运营&#xff1a;独立站可以自主运营&#xff0c;包…

COMP9024 C programming language

UNSW (University of New South Wales) C语言可 WeChat: nicefyt

书-顺序查找某个数字p153

#include<stdio.h> int main(){int a[10]{12,13,14,15,16,17,18,19,20,1};int i ;for( i0;i<9;i)if (a[i]15)break; //这里a【i】1要加括号&#xff0c;不要加分号if(i>9)printf("没找到你所需要的数字\n");elseprintf("找到了目标数字&#xff0…