|
实现一个字符串插入另外一个字符串中。程序中没做很严格的检查,算法或许显得冗长拖沓。
完整代码如下:
#include <stdio.h>
#include <string.h>
/*--------------*/
/*插入字符串 */
/*--------------*/
void strinsert (char *str1, char *str2, int pos)
{
int slen;
int dlen;
int i;
int flag = 0;
pos -= 2; //程序判断(从0算起)和用户定位习惯不同(从1算起)
slen = strlen (str1) + 1;
dlen = strlen (str2);
if (str1 [pos + 1] == ' ') { //处理插入位置是空格情况
flag = 1;
for (i = slen - pos; i > 0; i--) {
str1 [slen + dlen +1] = str1 [slen]; //多移动1位以保持插入后插入字符串前后都有空格
slen--;
}
} else {
for (i = slen - pos; i > 0; i--) { //插入位置无空格情况
str1 [slen + dlen] = str1 [slen];
slen--;
}
}
if (flag == 1)
pos += 2; //调整插入位置(在空格后插入)
else
pos += 1; //在下一个字母后插入
for (i = 0; i < dlen; i++)
str1 [pos + i] = str2 [i];
}
int main (void)
{
char string1 [512];
char string2 [512];
int pos;
int len;
printf ("输入原始字符串 ==> ");
fgets (string1, 256, stdin);
len = strlen (string1);
string1 [len-1] = '\0';
printf ("输入插入字符串 ==> ");
fgets (string2, 256, stdin);
len = strlen (string2);
string2 [len-1] = '\0';
printf ("输入要插入的位置 ==> ");
scanf ("%d", &pos);
strinsert (string1, string2, pos);
printf("插入后的字符串: ");
printf("%s\n", string1);
return (0);
} 运行及输出:beyes@linux-beyes:~/C/structer> ./strinsert2.exe
输入原始字符串 ==> hello world
输入插入字符串 ==> linux
输入要插入的位置 ==> 6
插入后的字符串: hello linux world
beyes@linux-beyes:~/C/structer> ./strinsert2.exe
输入原始字符串 ==> svice
输入插入字符串 ==> er
输入要插入的位置 ==> 2
插入后的字符串: service |
|