一个C程序的疑问???
#include<stdio.h>voidmain(){intstrcmp(char*str1,char*str2);charstring1[10],string2[10...
#include<stdio.h>
void main()
{
int strcmp(char *str1,char *str2);
char string1[10],string2[10];
gets(string1);
gets(string2);
printf("%d\n",strcmp(string1,string2));
}
int strcmp(char *str1,char *str2)
{
int flag=0;
while(*str1&&*str2)
{
if(*str1++>*str2++)
flag=1;
else if(*str1++<*str2++)
flag=-1;
else flag=0;
}
return flag;
}
我想表达出#include<string.h>中的strcmp.我知道这个程序是错的,但我想知道在这种错误的情况下(编译可通过),分析一下这个程序.
例子:
输入fasds和afdfdas,为什么输出0?
十分感谢!!! 展开
void main()
{
int strcmp(char *str1,char *str2);
char string1[10],string2[10];
gets(string1);
gets(string2);
printf("%d\n",strcmp(string1,string2));
}
int strcmp(char *str1,char *str2)
{
int flag=0;
while(*str1&&*str2)
{
if(*str1++>*str2++)
flag=1;
else if(*str1++<*str2++)
flag=-1;
else flag=0;
}
return flag;
}
我想表达出#include<string.h>中的strcmp.我知道这个程序是错的,但我想知道在这种错误的情况下(编译可通过),分析一下这个程序.
例子:
输入fasds和afdfdas,为什么输出0?
十分感谢!!! 展开
2个回答
展开全部
问题一:
strcmp没理解正确,strcmp在比较时有两种情况程序结束:
1、比较遇到了"\0";
2、比较遇到了不同的字符。
你的程序只有比较最后一个字符。
问题二:
if(*str1++>*str2++)
else if(*str1++<*str2++)
else
从这个结构可以看出,你的指针循环一次加了两次(if加了一次else if 又加了一次),这是导致你的字符串比对出问题的原因。
注:在最后一次比对时,if比对不为真,指针加一,else if 比对下一个字符又不为真,指针加一,执行else语句,而这时短字符串已经指向了零,不在循环。返回0。
strcmp没理解正确,strcmp在比较时有两种情况程序结束:
1、比较遇到了"\0";
2、比较遇到了不同的字符。
你的程序只有比较最后一个字符。
问题二:
if(*str1++>*str2++)
else if(*str1++<*str2++)
else
从这个结构可以看出,你的指针循环一次加了两次(if加了一次else if 又加了一次),这是导致你的字符串比对出问题的原因。
注:在最后一次比对时,if比对不为真,指针加一,else if 比对下一个字符又不为真,指针加一,执行else语句,而这时短字符串已经指向了零,不在循环。返回0。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询