本关任务:实现下面函数的功能。函数void insert(char*s, char*t, int pos)将字符
时间: 2023-11-27 10:01:37 浏览: 99
该函数的功能是将字符串t插入到字符串s的指定位置pos上。
首先,我们需要计算出字符串s的长度和字符串t的长度。然后,我们需要判断插入位置pos是否合法,即是否在字符串s的范围内。如果pos小于0或者大于等于字符串s的长度,则插入位置不合法。
接下来,我们需要为字符串s扩展内存空间以容纳字符串t。为此,我们需要先计算出扩展后的字符串s的长度。假设字符串s的长度为s_len,字符串t的长度为t_len,则扩展后的字符串长度为s_len + t_len + 1(+1是为了留出最后一个字符的结束符'\0')。
接着,我们使用动态内存分配函数malloc为扩展后的字符串s分配内存空间。分配的内存大小为扩展后的字符串长度。然后,我们需要将原字符串s中pos位置之前的部分复制到新的字符串中。接着,我们将字符串t复制到新的字符串的指定位置上。最后,我们将字符串s中pos位置之后的部分复制到新的字符串的对应位置上。然后,我们需要将最后一个字符的结束符'\0'添加到新的字符串的末尾。
最后,我们需要释放原字符串s的内存空间,并将新的字符串赋值给原字符串s。
下面是函数的具体实现:
void insert(char* s, char* t, int pos) {
int s_len = strlen(s);
int t_len = strlen(t);
// 判断插入位置是否合法
if (pos < 0 || pos >= s_len) {
printf("插入位置不合法\n");
return;
}
// 扩展字符串s的空间
int new_len = s_len + t_len + 1;
char* new_s = (char*)malloc(new_len * sizeof(char));
// 复制字符串s中pos位置之前的部分
strncpy(new_s, s, pos);
new_s[pos] = '\0';
// 复制字符串t到新字符串的指定位置上
strcpy(new_s + pos, t);
// 复制字符串s中pos位置之后的部分
strcpy(new_s + pos + t_len, s + pos);
// 添加结束符'\0'
new_s[new_len - 1] = '\0';
// 释放原字符串s的内存空间
free(s);
// 将新的字符串赋值给原字符串s
s = new_s;
}