鱼C论坛

 找回密码
 立即注册
查看: 2290|回复: 13

strcmp函数怎么写?

[复制链接]
发表于 2014-9-25 09:46:46 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 风之残月 于 2014-11-9 22:35 编辑
  1. #include <iostream>

  2. using namespace std;

  3. int my_strcmp(char* s1, char* s2)
  4. {
  5.     int ss1 = 0;
  6.     int ss2 = 0;

  7.     for(int i = 0; i != '\0'; ++i)
  8.     {
  9.         ss1 += s1[i];
  10.         ss2 += s2[i];
  11.     }
  12.     if(ss1 < ss2)
  13.     {
  14.         return -1;
  15.     }
  16.     if(ss1 > ss2)
  17.     {
  18.         return 1;
  19.     }
  20.     if(ss1 == ss2)
  21.     {
  22.         return 0;
  23.     }
  24. }

  25. int main()
  26. {
  27.     char s1[] = "a";
  28.     char s2[] = "b";

  29.     int result = my_strcmp(s1,s2);

  30.     cout<<result<<endl;

  31.     return 0;
复制代码

最佳答案

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-25 09:46:47 | 显示全部楼层
  1. int my_strcmp(char* s1, char* s2)
  2. {
  3.     while(*s1 != '\0' && *s2 != '\0')
  4.     {
  5.                    
  6.             if(*s1 > *s2) return 1;                 // s1 > s2
  7.             if(*s1 < *s2) return -1 ;         // s2 < s1
  8.             s1++;
  9.             s2++;
  10.     }
  11.     if(*s1 != '\0') return 1;
  12.     if(*s2 != '\0') return -1;
  13.     return 0;
  14. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-4 18:04:27 | 显示全部楼层
函数首部加上assert比较好

  1. int strcmp(const char *dest, const char *source)  {  
  2.    assert((NULL != dest) && (NULL != source));  
  3.    while (*dest && *source && (*dest == *source)) {  
  4.                    dest ++;  
  5.                    source ++;  
  6.    }  
  7.    return *dest - *source;  
  8. }  
复制代码

点评

我很赞同!: 5.0
我很赞同!: 5
  发表于 2014-10-8 12:10
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-27 10:42:18 | 显示全部楼层
如果输入是2个NULL 是不是应该崩溃了  应该先判断
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-9-27 10:53:23 | 显示全部楼层

我之前那段代码是哪里错了哦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-27 10:57:07 | 显示全部楼层
get it ~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-27 11:03:25 | 显示全部楼层
错误出在10行的for循坏判断条件不是 i != '\0'  。你知道应该怎么修改的

还有比较字符串的大小,应该是首先比较第一个字符,若相等再比较第二个字符,依次下去。。
你的程序是将所有的字符值加起来比较,例如字符串"aa"和字符串"b"就得出了第一个字符串大于第二个字符,这就不是strcmp,但如果你要满足一些特殊的需求,也可以这样实现
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-9-27 11:05:59 | 显示全部楼层
elvo 发表于 2014-9-27 11:03
错误出在10行的for循坏判断条件不是 i != '\0'  。你知道应该怎么修改的

还有比较字符串的大小,应该是 ...

哦,谢谢~ 我基础好差呀,你不说还没看出来~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-2 08:58:47 | 显示全部楼层
for语句 判断条件错误啊      i一开始就等于‘\0’for循环都进不去      进去加个标志位   判断两个数 s1[i]和s[i]的结束位置      还有累加不是好办法啊    一旦数据够长   ss1或则ss2 都可能溢出了     最好是做减法  再累加
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-2 14:45:16 | 显示全部楼层
char *a char*b 判断都不为空,然后指针同时指向第一个字符判断 如果ascii值相同指针推进 如果不同就返回1或-1 如果都到最后还找不出不同就返回0,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-4 17:19:49 | 显示全部楼层
微软自己的代码实现
  1. int __cdecl strcmp (
  2.         const char * src,
  3.         const char * dst
  4.         )
  5. {
  6.         int ret = 0 ;

  7.         while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
  8.                 ++src, ++dst;

  9.         if ( ret < 0 )
  10.                 ret = -1 ;
  11.         else if ( ret > 0 )
  12.                 ret = 1 ;

  13.         return( ret );
  14. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-10-4 18:09:31 | 显示全部楼层
仰望天上的光 发表于 2014-10-4 18:04
函数首部加上assert比较好

谢谢您,小仙要努力学,不能辜负您的指导~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2014-11-1 06:23:53 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-21 09:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表