等同:
while(*ptr!='\0')
{
b=*(ptr+1);
*(ptr+1)=c;
c=b;
ptr++;
}
九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。 -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。 -毛泽东
等同:
while(*ptr!='\0')
{
b=*(ptr+1);
*(ptr+1)=c;
c=b;
ptr++;
}
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编辑过]
[此贴子已经被作者于2004-11-13 15:16:57编辑过]
因为你是int t;int i=0;所以t,i都是整型,你用指针指向时,不可以直接+t,或+i,
[/QUOTE]
可以的
我又看了一遍,没看发现有什问题,告诉我你调试出错详细情况,最好贴上程序。
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编辑过]
while(q1>=(p1+4*(t-1))) { *(q1+4*i)=*q1;q1--;}
你能告诉我为什么要乘上个4???
char *p="abcdefg";
char *q;
q=p+4;//看看书,搞清这句+4编译器是如何处理的,还可以int a=4; q=p+a;
priintf("%s",q);//运行一下这几句
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
请问怎么回事?
当我输入不同长度的字符答案也不同;
输入:abcdefg
12345
3
输出:ab12345
[此贴子已经被作者于2004-11-14 13:19:57编辑过]
一句一句地把你的程序与我的对比一下,有两个错误。首先要理解,提示你一下:
1。变量的自增
2。if 与 for ,while 的区别