请编写函数,在目的串中插入源串。
函数原型
char* StrInsert(char *dst, int idx, const char *src);
说明:dst
为指示目的串起始地址的指针,idx
为插入位置(下标),src
为指示源串起始地址的指针。函数在目的串 dst
下标 idx
处插入源串 src
,函数值为 dst
。若 idx
不正确,则不插入子串。
要求:直接在原数组上完成操作,不要借助其它数组。
裁判程序
#include <stdio.h> char* StrInsert(char *dst, int idx, const char *src); int main() { char a[1024], b[1024]; int i; gets(a); scanf("%d%*c", &i); gets(b); StrInsert(a, i, b); puts(a); return 0; } /* 你提交的代码将被嵌在这里 */
输入样例1
abcd
0
ef
输出样例1
efabcd
输入样例2
abcd
2
ef
输出样例2
abefcd
输入样例3
abcd
4
ef
输出样例3
abcdef
输入样例4
abcd
10
ef
输出样例4
abcd
char* StrInsert(char* dst, int idx, const char* src)
{
//注意idx为负数的情况
if(idx<0)
return dst;
int k = strlen(dst);
if (idx > k)
return dst;
int k1 = strlen(src);
//b需要向后移动的目标串个数
int b = k - idx;
//如果目标串为空串
if (k==0)
{
if (idx == 0)
{
while (k1--)
{
*(dst+idx) = *src++;
idx++;
}
}
return dst;
}
//目标串不是空串
else if (k != 0)
{
//将需要移动的目标串元素移动插入串长度
while (b--)
{
dst[k - 1 + k1] = dst[k - 1];
k--;
}
//将目标串原位置替换为插入串
while (k1--)
{
dst[idx] = *src++;
idx++;
}
}
return dst;
}