当前位置: 代码迷 >> C语言 >> 这个函数看不懂
  详细解决方案

这个函数看不懂

热度:254   发布时间:2007-05-13 17:40:48.0
这个函数看不懂
这个是比较字符串的。。。但是那个函数:
int strcmp(char *p1,char *p2)
{int i;
i=0;
while(*(p1+i)==*(p2+i))
if(*(p2+i++)=='\0')return(0);
return(*(p1+i)-*(p2+i));
}

为什么*(p2+i++)等于'\0'就可以结束了?如果*(p1+i++)不是‘\0’怎么办?
那个字符串的指针是自动自加的对把??好象是这样


#include<stdio.h>
void main()
{int strcmp(char *p1,char *p2);
int m;
char str1[20],str2[20],*p1,*p2;
printf("input two string:\n");
scanf("%s",str1);
scanf("%s",str2);
p1=&str1[0];
p2=&str2[0];
m=strcmp(p1,p2);
printf("result:%d\n",m);
}
int strcmp(char *p1,char *p2)
{int i;
i=0;
while(*(p1+i)==*(p2+i))
if(*(p2+i++)=='\0')return(0);
return(*(p1+i)-*(p2+i));
}
搜索更多相关的解决方案: 函数  

----------------解决方案--------------------------------------------------------
晕了
----------------解决方案--------------------------------------------------------
你这个应该不是库函数中的比较字符串!
要用直接调用库就行了!
----------------解决方案--------------------------------------------------------
楼主的第一个函数可以的。。。。
的确像楼主所说的。

----------------解决方案--------------------------------------------------------
回复:(gdtwgz)这个函数看不懂
个人观点应该这样:
int strcmp(char *p1,char *p2)
{
int i;
i=0;
while(*(p1+i)==*(p2+i))
{
if(*(p2+i++)=='\0')
{
break;
}
else
{
i=*(p1+i)-*(p2+i);
}
}
return i;
}

至于为什么在'\0'是退出循环是因为字符数组最后一个字符为'\0'


----------------解决方案--------------------------------------------------------
以下是引用acmilann在2007-5-13 17:59:16的发言:
你这个应该不是库函数中的比较字符串!
要用直接调用库就行了!

知道可以调用,但我是为了搞懂为什么,为了学东西,,,,
----------------解决方案--------------------------------------------------------
我发的东西是正确的。。书上写的,上机也对的。。但就是搞不懂,,所以不需要修改,,,只帮我解释一下就好了。。
在这个函数中,当(p2+i++)=='\0',return(0),而回0意思就是说P1,P2相同。。。为什么单(p2+i++)=='\0'就可以。。如果*(p1+i++)不是‘\0’怎么办?
我的问题是这样
----------------解决方案--------------------------------------------------------

原因是这样的:
首先要注意的是
if(*(p2+i++)=='\0')return(0);
其实等同于:
if(*(p2+i)=='\0')return(0);
i++;
也就是说先用i然后在i++.
在加上循环的条件while(*(p1+i)==*(p2+i)).

如果要运行if那么必须*(p1+i)==*(p2+i)),

所以如果*(p2+i)=='\0'其实必须*(p1+i)=='\0'.

如果两个不相等就要跳出循环了.
所以把*(p2+i)=='\0'改为*(p1+i)=='\0'效果一样.


----------------解决方案--------------------------------------------------------
明白了
----------------解决方案--------------------------------------------------------
int strcmp(char *p1,char *p2)
{
while( *p1&&*p2 && *p1==*p2 )
p++,p2++;
return *p1-*p2;

}

[此贴子已经被作者于2007-5-17 17:23:12编辑过]


----------------解决方案--------------------------------------------------------
  相关解决方案