C语言字符串如何高效插入另一字符串?

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

在C语言中插入字符串

在C语言中,由于字符串是以null结尾的字符数组,直接插入字符串需要手动操作,以下是几种实现字符串插入的方法:

c语言 字符串中插入字符串
(图片来源网络,侵删)

方法1:使用标准库函数(strcat和strcpy)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* insert_string(const char* original, const char* insert, int position) {
    // 计算各部分长度
    size_t orig_len = strlen(original);
    size_t insert_len = strlen(insert);
    // 检查位置是否有效
    if (position < 0 || position > orig_len) {
        return NULL;
    }
    // 分配足够空间(原字符串+插入字符串+null终止符)
    char* result = (char*)malloc(orig_len + insert_len + 1);
    if (!result) {
        return NULL;
    }
    // 复制原字符串的前半部分
    strncpy(result, original, position);
    result[position] = '\0';
    // 拼接插入字符串
    strcat(result, insert);
    // 拼接原字符串的后半部分
    strcat(result, original + position);
    return result;
}
int main() {
    const char* original = "Hello, world!";
    const char* insert = " beautiful";
    int position = 7;
    char* new_str = insert_string(original, insert, position);
    if (new_str) {
        printf("Original: %s\n", original);
        printf("Inserted: %s\n", new_str);
        free(new_str);
    } else {
        printf("Insertion failed.\n");
    }
    return 0;
}

方法2:使用指针操作(更高效)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* insert_string_ptr(const char* original, const char* insert, int position) {
    size_t orig_len = strlen(original);
    size_t insert_len = strlen(insert);
    if (position < 0 || position > orig_len) {
        return NULL;
    }
    char* result = (char*)malloc(orig_len + insert_len + 1);
    if (!result) {
        return NULL;
    }
    char* dest = result;
    // 复制前半部分
    memcpy(dest, original, position);
    dest += position;
    // 复制插入字符串
    memcpy(dest, insert, insert_len);
    dest += insert_len;
    // 复制后半部分
    memcpy(dest, original + position, orig_len - position + 1); // +1包含null终止符
    return result;
}
int main() {
    const char* original = "Hello, world!";
    const char* insert = " beautiful";
    int position = 7;
    char* new_str = insert_string_ptr(original, insert, position);
    if (new_str) {
        printf("Original: %s\n", original);
        printf("Inserted: %s\n", new_str);
        free(new_str);
    } else {
        printf("Insertion failed.\n");
    }
    return 0;
}

方法3:使用动态数组(C99及以上)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void insert_string_dynamic(char** original, const char* insert, int position) {
    size_t orig_len = strlen(*original);
    size_t insert_len = strlen(insert);
    if (position < 0 || position > orig_len) {
        return;
    }
    // 重新分配内存
    char* new_str = (char*)realloc(*original, orig_len + insert_len + 1);
    if (!new_str) {
        return;
    }
    // 移动后半部分
    memmove(new_str + position + insert_len, new_str + position, orig_len - position + 1);
    // 插入新字符串
    memcpy(new_str + position, insert, insert_len);
    *original = new_str;
}
int main() {
    char* original = strdup("Hello, world!"); // 需要分配内存
    const char* insert = " beautiful";
    int position = 7;
    printf("Original: %s\n", original);
    insert_string_dynamic(&original, insert, position);
    printf("Inserted: %s\n", original);
    free(original);
    return 0;
}

注意事项

  1. 内存管理:使用malloc/realloc分配的内存需要手动释放
  2. 边界检查:确保插入位置在有效范围内
  3. 字符串长度:计算时要包括null终止符
  4. 安全性:考虑使用strncpystrncat限制复制的字符数,防止缓冲区溢出

方法都可以实现字符串插入,选择哪种取决于你的具体需求和C语言版本,方法2(指针操作)通常是最高效的。

c语言 字符串中插入字符串
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
dede免登录提交订单如何实现安全验证?
« 上一篇 今天
没有更多啦!
下一篇 »

相关文章

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

目录[+]