2位字符数组比较问题

[复制链接]
2404|9
 楼主| hw2008323 发表于 2013-3-3 19:29 | 显示全部楼层 |阅读模式
本帖最后由 hw2008323 于 2013-3-13 20:29 编辑

2位字符数组比较问题,char a[2],b[2]
例如a[0]=1;a[1]=2;    b[0]=1;b[1]=3;
我自己写的比较程序,总有问题,不管如何改变A和B的值,比较结果都是一样的,都是返回1.


cmp_start_and_stop_01//a>b返回1,a==b返回0,否则返回-1;
{                        
               if(a[0]>b[0])           {return 1;}        
                       ifa[0]==b[0])
                      {
                           if  (a[1]>b[1])                   {return 1;}
                           else        if(a[1]<b[1])          {return -1;}
                           else     if(a[1]==b[1])        {return 0;}
                       }               
                  else            return -1;
}
修改:其实我是从24C02里提取出4个数来2个2个的比较,数据内容是预先存的时间。例如:13:10分,和13:15分。
是一个检查存的时间是否符合一定的规则,一段代码。例如:13:10分小于13:15分。a[0]=13;a[1]=10比较b[0]=13;b[1]=15;
aozima 发表于 2013-3-3 21:42 | 显示全部楼层
JerryWu75 发表于 2013-3-4 08:35 | 显示全部楼层
cmp_start_and_stop_01//a>b返回1,a==b返回0,否则返回-1;
{                        
               if(a[0]>b[0])           {return 1;}        
                       ifa[0]==b[0])
                       {
                            if  (a[1]>a[1])                   {return 1;}    这行错了吧!
                            else        if(a[1]<b[1])          {return -1;}
                            else     if(a[1]==b[1])        {return 0;}
                        }               
                  else            return -1;
}
另外你的比较大小的依据是什么,如果a[0]<b[0]但是a[1]>b[1]会是什么状态?
还有char在编译时会解析为unsigned还是signed?
qiujiahong 发表于 2013-3-4 17:57 | 显示全部楼层
memcmp,strcmp!
sedatefire 发表于 2013-3-4 20:59 | 显示全部楼层
  1. unsigned int cmp_start_and_stop_01(void)
  2. {
  3.         if (a[0]>b[0])
  4.         {
  5.                 return 1;   /*返回值大于0*/
  6.         }            

  7.         if (a[0]==b[0])
  8.         {
  9.                 if  (a[1]>a[1])                                   
  10.                 {
  11.                         return 1;/* 永远不成立*/
  12.                 }
  13.                 else if (a[1]<b[1])
  14.                 {
  15.                         return -1;
  16.                 }
  17.                 else if(a[1]==b[1])            
  18.                 {
  19.                         return 0;                    /* 仅当a0==b0,且a1==b1的情况下成立*/
  20.                 }
  21.                 /*
  22.                else{ ????  }
  23.                没有返回值吗,程序编译报警了吧???
  24.              */
  25.         }                                 
  26.         else
  27.         {
  28.                 return -1;            /*这个返回的也是大于0 */
  29.         }
  30. }
sedatefire 发表于 2013-3-4 21:06 | 显示全部楼层
搞不清楚你想干嘛,比较数组差异吗?
sint_t  array_cmp(uint8_t  *a,  uint8_t *b,  uint_fast32_len)
{
     uint_fast32_t  i = 0;

     while ((i<len) && (a[i] == bi[i]))
     {
         i++;
     }
   
     if (i>=len)
     {
         i--;
     }
     return ((sint_t)a[i]-(sint_t)b[i]);
}
 楼主| hw2008323 发表于 2013-3-13 20:34 | 显示全部楼层
JerryWu75 发表于 2013-3-4 08:35
cmp_start_and_stop_01//a>b返回1,a==b返回0,否则返回-1;
{                        
               i ...

2位字符数组比较问题,char a[2],b[2]
例如a[0]=1;a[1]=2;    b[0]=1;b[1]=3;
我自己写的比较程序,总有问题,不管如何改变A和B的值,比较结果都是一样的,都是返回1.


cmp_start_and_stop_01//a>b返回1,a==b返回0,否则返回-1;
{                        
                if(a[0]>b[0])           {return 1;}        
                        ifa[0]==b[0])
                       {
                            if  (a[1]>b[1])                   {return 1;}
                            else        if(a[1]<b[1])          {return -1;}
                            else     if(a[1]==b[1])        {return 0;}
                        }               
                  else            return -1;
}
修改:其实我是从24C02里提取出4个数来2个2个的比较,数据内容是预先存的时间。例如:13:10分,和13:15分。
是一个检查存的时间是否符合一定的规则,一段代码。例如:13:10分小于13:15分。a[0]=13;a[1]=10比较b[0]=13;b[1]=15;
delin17 发表于 2013-3-13 20:55 | 显示全部楼层
自己单步跟一下,比在这问强百倍。
JerryWu75 发表于 2013-3-22 16:13 | 显示全部楼层
hw2008323 发表于 2013-3-13 20:34
2位字符数组比较问题,char a[2],b[2]
例如a[0]=1;a[1]=2;    b[0]=1;b[1]=3;
我自己写的比较程序,总 ...

函数cmp_start_and_stop_01的定义是什么,是void,char?
dqyubsh 发表于 2013-3-23 12:30 | 显示全部楼层
转换成16位的整数,再比较。复杂一点的写个结构,用memcmp比较。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部