• 【PTA刷题】请编写函数,求子串(详解+代码)


    【PTA刷题-C】请编写函数,求子串(详解+代码)

    文章目录

    • 【PTA刷题-C】请编写函数,求子串(详解+代码)
      • 一. 问题背景:
      • 二. 函数签名和目标:
      • 三. 解题思路:
      • 四. 边界处理:
      • 五.示例代码:


    题目:

    请编写函数,求子串。

    函数原型

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

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

    裁判程序

    #include 
    
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    输入样例1

    abcd
    1 2
    
    • 1
    • 2

    输出样例1

    bc
    
    • 1

    输入样例2

    abcd
    1 5
    
    • 1
    • 2

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

    输出样例2

    bcd
    
    • 1

    输入样例3

    abcd
    -5 2
    
    • 1
    • 2

    输出样例3

    
    
    • 1

    注:输出为空串。


    引言:

    字符串操作是计算机编程中不可或缺的一部分。有时,我们需要从一个较大的字符串中提取一部分字符串,这就是所谓的子串操作。在C语言中,没有内置的函数来执行这种操作,因此我们需要自己编写一个函数来实现它。本文将介绍如何编写 StrMid 函数,用于提取子串,并将详细解释其实现过程。


    一. 问题背景:

    在C语言中,字符串是一个字符数组,以null终止。子串是源字符串的一部分,我们通常需要从源字符串中提取子串来进行进一步处理。这个问题的解决方案将帮助我们更好地理解字符串操作


    二. 函数签名和目标:

    让我们首先定义 StrMid 函数的签名和目标:

    char* StrMid(char *dst, const char *src, int idx, int len);
    
    • 1
    • dst 是目的字符串,用于存储子串。
    • src 是源字符串,从中提取子串。
    • idx 是从源字符串的哪个位置开始提取子串。
    • len 是要提取的子串的长度。

    函数的目标是将提取的子串存储在dst 中,并返回 dst。


    三. 解题思路:

    下面详细解释如何实现 StrMid 函数的步骤:

    1:检查 idx

    我们首先检查 idx 是否小于0,如果是,那么 idx 值不正确,我们将目的串 dst 设置为空串。

    2:修正 len

    如果 idx 是非负数,我们需要修正 len,以确保不会超过源字符串 src 的长度减去 idx

    3:使用 strncpy 复制子串。

    我们使用 strncpy 函数将子串从源字符串 src 复制到目的字符串 dst。这将提取 len 个字符,从 idx 位置开始。

    4:确保目的字符串以 null 终止。

    最后,我们确保目的字符串以 null 终止,以确保它是一个有效的C字符串


    四. 边界处理:

    我们还需要处理可能的边界情况,包括 idxlen 的不正确值。例如,如果 idx 为负数,我们将目的串设置为空串。如果 len 超过了可用的源字符串长度,我们将 len 修正为可用的长度。


    五.示例代码:

    以下是完整的C语言示例代码,包括 StrMid 函数和 main 函数:

    #include 
    #include 
    
    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 结尾
            }
        }
        
        return dst;
    }
    
    
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
  • 相关阅读:
    如何利用OpenMesh实现不同格式的3D文件间的转换
    uniapp使用多列布局显示图片,一行两列
    cmd常用命令
    Java练习22
    机器学习05|一万五字:SVM支持向量机01 【原理详解篇】
    基于Qt实现的轻量级CAD画图软件
    UI设计必备网站,一定要收藏。
    Python第二语言(十三、PySpark实战)
    多测师肖sir_高级金牌讲师___ui自动化之selenium001
    03.UDP套接字与原始套接字
  • 原文地址:https://blog.csdn.net/weixin_75202470/article/details/134086286