C语言如何实现substr函数?

99ANYc3cd6
预计阅读时长 11 分钟
位置: 首页 C语言 正文

C语言实现substr函数

在C语言中,我们可以自己实现一个类似其他语言中substr的函数,用于从字符串中提取一个子字符串,以下是几种实现方式:

c语言实现substr
(图片来源网络,侵删)

方法1:使用标准库函数

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* substr(const char* str, int start, int length) {
    if (str == NULL || start < 0 || length < 0) {
        return NULL;
    }
    int str_len = strlen(str);
    if (start >= str_len) {
        return NULL;
    }
    if (start + length > str_len) {
        length = str_len - start;
    }
    char* result = (char*)malloc(length + 1);
    if (result == NULL) {
        return NULL;
    }
    memcpy(result, str + start, length);
    result[length] = '\0';
    return result;
}
int main() {
    const char* str = "Hello, World!";
    char* sub = substr(str, 7, 5);
    if (sub != NULL) {
        printf("Original: %s\n", str);
        printf("Substring: %s\n", sub);
        free(sub);
    }
    return 0;
}

方法2:不使用标准库函数

#include <stdio.h>
#include <stdlib.h>
char* substr(const char* str, int start, int length) {
    if (str == NULL || start < 0 || length < 0) {
        return NULL;
    }
    // 计算字符串长度
    int str_len = 0;
    while (str[str_len] != '\0') {
        str_len++;
    }
    if (start >= str_len) {
        return NULL;
    }
    if (start + length > str_len) {
        length = str_len - start;
    }
    char* result = (char*)malloc(length + 1);
    if (result == NULL) {
        return NULL;
    }
    for (int i = 0; i < length; i++) {
        result[i] = str[start + i];
    }
    result[length] = '\0';
    return result;
}
int main() {
    const char* str = "Hello, World!";
    char* sub = substr(str, 7, 5);
    if (sub != NULL) {
        printf("Original: %s\n", str);
        printf("Substring: %s\n", sub);
        free(sub);
    }
    return 0;
}

方法3:直接修改原字符串(不推荐)

这种方法会直接修改原字符串,通常不推荐使用,因为它会改变原始数据:

#include <stdio.h>
#include <string.h>
void substr_inplace(char* str, int start, int length) {
    if (str == NULL || start < 0 || length < 0) {
        return;
    }
    int str_len = strlen(str);
    if (start >= str_len) {
        str[0] = '\0';
        return;
    }
    if (start + length > str_len) {
        length = str_len - start;
    }
    // 移动子字符串到开头
    memmove(str, str + start, length);
    str[length] = '\0';
}
int main() {
    char str[] = "Hello, World!";
    printf("Original: %s\n", str);
    substr_inplace(str, 7, 5);
    printf("Modified: %s\n", str);
    return 0;
}

注意事项

  1. 内存管理:前两种方法分配了内存,调用者需要负责释放内存
  2. 边界检查:确保start和length在有效范围内
  3. 字符串长度:确保不会越界访问
  4. NULL指针:处理输入字符串为NULL的情况

选择哪种方法取决于你的具体需求,如果需要保留原字符串,使用方法1或2;如果可以修改原字符串,方法3也可以使用但不推荐。

c语言实现substr
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
dede手工上传按钮如何使用?
« 上一篇 今天
Java如何调用C语言函数?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]