串插入 StrInsert(s,i,t)操作条件:串 s,t 存在,1≤i≤StrLength(s)+1。操作结果:将串 t 插入到串 s 的第 i 个字符位置上,s 的串值发生改变。
来源:数据结构上机题目
思路:直接利用指针对字符数组中的字符进行移动和赋值
void StrInsert(char * s, int i, const char * t){ if (i<1 || i>StrLength(s) + 1) { puts("函数StrInsert参数有问题!"); return; } char * p1; p1 = s; int j; p1 = p1 + i - 1; for (j = 0; j < StrLength(s) - i + 1; j++) *(p1 + StrLength(s) + StrLength(t) - i - j) = *(p1 + StrLength(s) - i - j);//后面的元素的移动 s[StrLength(s) + StrLength(t)] = '\0'; for (j = 0; j < StrLength(t); j++) *(p1 + j) = t[j];//对移动之后空出来的位置进行赋值}
在字符串t只有一个字符的时候,此处假设这个字符串为"d"
当待插入的字符串s赋值以 char a[20] = "abc";的形式时,调用该函数StrInsert(a,2,"d")可以使得a = "adbc"
当待插入的字符串s赋值以 char a[20]; scanf("%s",a);时,调用该函数直接导致内存读取错误,打印出来的字符串是类似于“烫烫烫......”
希望能有大佬解答这个问题,非常感谢!!!
神不在的星期二
相关分类