等同:
while(*ptr!='\0')
{
b=*(ptr+1);
*(ptr+1)=c;
c=b;
ptr++;
}
九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。 -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。 -毛泽东
KNOCK:我用了你的这个方法,有点问题:
因为你是int t;int i=0;所以t,i都是整型,你用指针指向时,不可以直接+t,或+i,
char insert(char*p1,char*p2,int t) { char *ptr1=p1,*ptr2=p2; int i=0;
while(*ptr2)i++,ptr2++;/*计算p2字符个数*/
while(*ptr1)ptr1++; /*ptr1指向p1的未端*/
while(ptr1>=p1+t-1)*(ptr1+i)=*ptr1,ptr1--;/*应改为while(ptr1>=p1+4*(t-1)) *(ptr1+4*i)=*ptr1,ptr1--;*/
while(*p2)*(p1+t-1)=*p2,p1++,p2++; /*应改为while(*p2) *(p1+4*(t-1))=*p2,p1++,p2++*/ }
是不是应该这样?[此贴子已经被作者于2004-11-13 12:04:24编辑过]
char insert(char*p1,char*p2,int t) { char *q1=p1,*q2=p2; int i;
for(i=0;*q2!='\0';i=++,q2++); /* 计算p2字符个数 */
if(*q1!='\0') q1++; /* q1指向p1末端 */
while(q1>=(p1+4*(t-1))) { *(q1+4*i)=*q1;q1--;} /* p1先行向后移i个位置*/
if(*p2++!='\0') { *(p1+4*(t-1))=*p2;p1++;} /*copy p2 to p1*/ }
main()
{char a[50],b[50];
int m;
gets(a);
gets(b);
scanf("%d",&m);
insert(a,b,m);
puts(a);
}
我输入:abcdefg
12345
3
应该输出:ab12345cdefg
而我的答案是abcdefg
我查了半天感觉上好象没什么问题,请指教!
[此贴子已经被作者于2004-11-13 18:32:00编辑过]
sizeof (char)表示有4个字节,我以为指针+1就等于加四,原来我理解错了,
输出的是efg, understand.thanks
但是:我没有乘以4,作出的答案也不对:
char insert(char*p1,char*p2,int t) { char *q1=p1,*q2=p2; int i;
for(i=0;*q2!='\0';i=++,q2++); /* 计算p2字符个数 */
if(*q1!='\0') q1++; /* q1指向p1末端 */
while(q1>=(p1+t-1)) { *(q1+i)=*q1;q1--;} /* p1先行向后移i个位置*/
while(*p2!='\0') {*(p1+t-1)=*p2;p1++;p2++;} /*copy p2 to p1*/ }
main()
{char a[50],b[50];
int m;
gets(a);
gets(b);
scanf("%d",&m);
insert(a,b,m);
puts(a);
}
我输入:abcdef
12345
2
输出:a12345b
请问怎么回事?