鱼C论坛

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

strcmp函数怎么写?

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

using namespace std;

int my_strcmp(char* s1, char* s2)
{
    int ss1 = 0;
    int ss2 = 0;

    for(int i = 0; i != '\0'; ++i)
    {
        ss1 += s1[i];
        ss2 += s2[i];
    }
    if(ss1 < ss2)
    {
        return -1;
    }
    if(ss1 > ss2)
    {
        return 1;
    }
    if(ss1 == ss2)
    {
        return 0;
    }
}

int main()
{
    char s1[] = "a";
    char s2[] = "b";

    int result = my_strcmp(s1,s2);

    cout<<result<<endl;

    return 0;
}

最佳答案

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

使用道具 举报

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

使用道具 举报

发表于 2014-10-4 18:04:27 | 显示全部楼层
函数首部加上assert比较好
int strcmp(const char *dest, const char *source)  {  
   assert((NULL != dest) && (NULL != source));  
   while (*dest && *source && (*dest == *source)) {  
                   dest ++;  
                   source ++;  
   }  
   return *dest - *source;  
}  

点评

我很赞同!: 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 | 显示全部楼层
微软自己的代码实现
int __cdecl strcmp (
        const char * src,
        const char * dst
        )
{
        int ret = 0 ;

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

        if ( ret < 0 )
                ret = -1 ;
        else if ( ret > 0 )
                ret = 1 ;

        return( ret );
}
想知道小甲鱼最近在做啥?请访问 -> 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-11-25 05:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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