题目:编写一个函数,将一个字符串插入到另一个字符串的某个位置后面(例如:将”abc”插入到”abcdef”的第三个字符位置后面,结果为”abcabcdef”)。编写程序时,请在必要的地方加以注释(注:不能用该程序语言的内置函数或过程)。
思路:
- 将str1字符串的指定位置后的内容复制到另一个字符串中,空间换时间降低时间复杂度;
- 再将str2字符串(待插入字符串)复制到str1的指定位置;
- 将str1和tmp拼接起来(这里用到了字符串拼接函数)。
代码实现:
#include <iostream>
#define Max_num 1000
int myStrlen(const char *str)
{
int len = 0;
while (*str++)
len++;
return len;
}
void myStrcat(char *str1, char *str2) //拼接函数
{
int len1 = strlen(str1);
int len2 = strlen(str2);
for (int i = 0;i < len2;i++)
{
str1[len1 + i] = str2[i];
}
str1[len1 + len2] = '\0';
}
void myLink(char *str1, char *str2,int pos)
{
int len1 = myStrlen(str1);
int len2 = myStrlen(str2);
char *tmp= (char *)malloc(sizeof(char));
int cnt = 0;
for (int i = pos; i <= len1;i++)
{
//*tmp++ = str1[i]; //指针要初始化或者有相应的值,这样是错误的
tmp[cnt++] = str1[i];
}
int j;
for ( j = 0;j < len2;j++)
{
str1[ pos + j] = *str2++;
}
str1[pos + j] = '\0';
myStrcat(str1, tmp);
}
int main()
{
char str1[Max_num], str2[Max_num];
int n;
while (cin>>str1>>str2)
{
cin >> n;
myLink(str1, str2, n);
cout << str1 <<endl;
}
return 0;
}