#include <stdio.h> #include <string.h> void main() { char s[40],v[20],min; int i,j,len,n; char *p; gets(s); gets(v); min = s[0]; p = &s[0]; n = 1; for (i=1; s[i]!='/0'; i++) /*找出s字符串中最小的字母*/ { if (s[i] < min) { p = &s[i]; min = s[i]; n = i+1; } } j = strlen(v); len = strlen(s); for (i=len-n; i>0; i--) /*将最小字母后面的字符后移*/ *(p+i+j) = *(p+i); *(p+len-n+j+1) = '/0'; for (i=0; v[i]!='/0';i++) /*将v字符串添加到s字符串*/ *(p+i+1) = v[i]; for (i=0; s[i] != '/0'; i++) printf("%c",s[i]); printf("/n"); } /*在将s后面的字符串后移的时候,要注意是否将后面的字符覆盖,所以最后从后面 开始移动,渐渐地向前 以前所犯的错误for (i=0; *(p+i+j)!='/0'; i++) 假使当s字符串为bbbabb时,v字符串为ab时,此使会将s字符串中最后面的两个字符后移,正好较前面的 那个覆盖住了'/0',造成了严重的后果...... */