设有一个长度为 s 的字符串采用顺序存储,现要求从此串的第 m 个字符开始删除长度为 t 的子串, m < s , t <( s - m ).请写完成该功能的函数。使用《算法与数据结构-C语言描述》张乃孝所著的教材中要求的方法
时间: 2024-10-29 11:18:04 浏览: 25
c语言输出字符串中最大对称子串长度的3种解决方案
在《算法与数据结构-C语言描述》这本书中,解决这个问题通常会涉及到数组的操作和指针的概念。为了实现这个功能,你可以创建一个新的字符串,其长度为原字符串`s`减去子串`t`后的剩余部分。下面是一个简单的C语言函数实现:
```c
#include <stdio.h>
#include <string.h>
// 定义函数,传入原字符串、起始位置和子串长度
void delete_substring(char* str, int m, int t) {
// 检查输入的有效性
if (m >= 0 && m + t <= strlen(str)) {
// 计算新字符串的长度
int new_len = strlen(str) - t;
// 创建新的动态内存空间存储结果
char* new_str = (char*)malloc(new_len + 1); // 为null字符留位
if (new_str != NULL) {
// 使用指针操作,从原始字符串的第m+1个字符开始复制到新字符串
strncpy(new_str, &str[m + 1], new_len);
new_str[new_len] = '\0'; // 结束字符串
printf("删除子串后的字符串是:%s\n", new_str);
free(new_str); // 释放原字符串空间
} else {
printf("内存分配失败!\n");
}
} else {
printf("无效的输入:起始位置m超出范围或子串长度t大于可用长度。\n");
}
}
int main() {
char str[] = "Hello, world!";
int m = 7, t = 5; // 从第7个字符开始删除长度为5的子串
delete_substring(str, m, t);
return 0;
}
```
在这个函数中,我们首先检查输入的有效性,然后计算新字符串的长度,并使用`strncpy`复制指定的子串到新字符串中。最后返回并处理结果。
阅读全文