首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strcmp的实现

strcmp的实现
EN

Stack Overflow用户
提问于 2016-01-19 09:38:27
回答 8查看 41.6K关注 0票数 9

我试图实现strcmp

代码语言:javascript
复制
int strCmp(char string1[], char string2[])
{
    int i = 0, flag = 0;    
    while (flag == 0) {
        if (string1[i] > string2[i]) {
            flag = 1;
        } else
        if (string1[i] < string2[i]) {
            flag = -1;
        } else {
            i++;
        }
    }
    return flag;
}

但是我仍然认为用户将输入相同的字符串,因为这个函数可以使用1-1,但是它不返回0。有人能帮忙吗?请不要指指点点!

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2016-01-19 10:15:52

您似乎希望避免指针算法,这是一个遗憾,因为这使解决方案更短,但您的问题是,您只是扫描结束的字符串。添加显式中断将有效。您的程序略有修改:

代码语言:javascript
复制
int strCmp(char string1[], char string2[] )
{
    int i = 0;
    int flag = 0;    
    while (flag == 0)
    {
        if (string1[i] > string2[i])
        {
            flag = 1;
        }
        else if (string1[i] < string2[i])
        {
            flag = -1;
        }

        if (string1[i] == '\0')
        {
            break;
        }

        i++;
    }
    return flag;
}

较短的版本:

代码语言:javascript
复制
int strCmp(char string1[], char string2[] )
{
    for (int i = 0; ; i++)
    {
        if (string1[i] != string2[i])
        {
            return string1[i] < string2[i] ? -1 : 1;
        }

        if (string1[i] == '\0')
        {
            return 0;
        }
    }
}
票数 6
EN

Stack Overflow用户

发布于 2016-01-19 09:47:18

嗯..。太复杂了。去找这个吧:

代码语言:javascript
复制
int strCmp(const char* s1, const char* s2)
{
    while(*s1 && (*s1 == *s2))
    {
        s1++;
        s2++;
    }
    return *(const unsigned char*)s1 - *(const unsigned char*)s2;
}

它按预期返回<0,0或>0

没有指针你是做不到的。在C中,数组索引使用指针。

也许您想避免使用*操作符?:-)

票数 39
EN

Stack Overflow用户

发布于 2016-01-19 10:02:17

首先,标准C函数strcmp比较字符串元素的类型为unsigned char

其次,参数应该是指向常量字符串的指针,以提供常量字符串的比较。

该函数可以按以下方式编写

代码语言:javascript
复制
int strCmp( const char *s1, const char *s2 )
{
    const unsigned char *p1 = ( const unsigned char * )s1;
    const unsigned char *p2 = ( const unsigned char * )s2;

    while ( *p1 && *p1 == *p2 ) ++p1, ++p2;

    return ( *p1 > *p2 ) - ( *p2  > *p1 );
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34873209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档