标题:急:请帮忙分析这个strcmp()函数
只看楼主
youyuanjia
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-9-19
结帖率:84.62%
已结贴  问题点数:20 回复次数:7 
急:请帮忙分析这个strcmp()函数
以下与库函数strcmp(char *s,char *t)的功能相等的程序段是(  )
A、strcmp1(char *s,char *t)
   {
      for(;*s++==*t++;)
       if(*s=='\0')return 0;
     return (*s-*t);
    }
B 、strcmp2(char *s,char *t)
   {
      for(;*s++==*t++;)
       if(!*s)return 0;
     return (*s-*t);
    }
C、strcmp3(char *s,char *t)
   {
      for(;*t==*s;)
       { if(!*t)return 0;t++;s++ }
     return (*s-*t);
    }
D、strcmp4(char *s,char *t)
   {
      for(;*s==*t;s++;t++)
       if(!*s)return 0;
     return (*t-*s);
    }
请各位高手帮我将每个答案分析下下,谢谢


 
搜索更多相关主题的帖子: strcmp 函数 
2009-09-10 14:36
youyuanjia
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-9-19
得分:0 
怎么就没有人回应呢?版主啊,救救我吧
2009-09-11 20:20
jig
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
帖 子:530
专家分:242
注 册:2005-12-27
得分:10 
首先,纠正两条

C、strcmp3(char *s,char *t)
   {
      for(;*t==*s;)
       { if(!*t)return 0;t++;s++ ; }
     return (*s-*t);
    }
D、strcmp4(char *s,char *t)
   {
      for(;*s==*t;s++ , t++)
       if(!*s)return 0;
     return (*t-*s);
    }

应该改为红色标点标记的这样。

答案就在C,D之间选择。从代码逻辑上来说C,D都是对的。但 strcmp 的返回结果是 小于0:str1<str2,等于0:str1=str2,大于0:str1>str2

所以以此对应应该是选C

个人网站 -  http://.h001.
2009-09-12 07:44
youyuanjia
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-9-19
得分:0 
回复 3楼 jig
谢谢版主,我还有一个问题就是为什么A 和B不对呢,错在哪里哦?
2009-09-12 14:01
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
得分:10 
A和B错误只在这for循环里的*s++,*t++.   
for(;*s++==*t++;)  因为当*s与*t不相等时退出for循环后++又把s与t指针向后指了一位,
  if(*s=='\0')return 0;
return (*s-*t);   到这里时,s与t的指都指后一个字符的位置。所以反回结果是不对的。

努力—前进—变老—退休—入土
2009-09-12 14:25
atom_09
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:92
专家分:141
注 册:2009-8-24
得分:0 
这个对于新手似乎有点难度哦
2009-09-14 17:29
rs369007
Rank: 2
等 级:论坛游民
帖 子:30
专家分:11
注 册:2009-2-25
得分:0 
单看还回语句 (return) 就可排除A B D 当s串长度小于t串时,A B D都会返回0 所以for外还该有个 return
2009-09-15 20:55
地狱无明火
Rank: 2
等 级:论坛游民
帖 子:62
专家分:71
注 册:2009-6-11
得分:0 
if(!*s)return 0;

//不能理解这句的意义

稍微测试了下,发现没了!才能使


程序代码:
#include <stdio.h>

int strcmp1 (char* a, char* b);

int main (void)
{
    int yes;
    char a[6] = "12345";
    char b[6] = "22345";
    yes = strcmp1(a, b);
    if(yes < 0)
        printf("a < b\n");
    else if(yes == 0)
        printf("a = b\n");
    else if(yes > 0)
        printf("a > b\n");
    return 0;
}

int strcmp1(char* a, char* b)
{
    for(;*a == *b;)
        if(*a)
            return 0;
    return (*b-*a);
}





2009-09-16 03:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-285319-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013492 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved