strcmp()在C中完全返回什么?

时间:2016-01-16 08:01:24

标签: c string strcmp

我在C:

中编写了这段代码
textview.append(getColoredString(this, "Hi!", ContextCompact.getColor(this, R.color.red)));
textview.append(getColoredString(this, "User", ContextCompact.getColor(this, R.color.green)));

控制台是否应打印值1或#include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> int main() { char string1[20]; char string2[20]; strcpy(string1, "Heloooo"); strcpy(string2, "Helloo"); printf("%d", strcmp(string1, string2)); return(0); } ASCII字符o值之间的差异,即111?在this website上,写出这应该给出放置111,但是当我在笔记本电脑上运行时,它显示1.为什么?

6 个答案:

答案 0 :(得分:16)

来自the cppreference.com documentation

int strcmp( const char *lhs, const char *rhs );
     

返回值

     
      
  • 如果lhs以字典顺序出现在rhs之前,则为负值。

  •   
  • 如果lhs和rhs相等则为零。

  •   
  • 如果lhs以字典顺序出现在rhs之后,则为正值。

  •   

正如你所看到的,它只是表示消极,零或正面。你不能指望别的什么。

您关联的网站不正确。它告诉您返回值为< 0== 0> 0,它给出了一个示例并显示了它的输出。它不会告诉输出应该 111

答案 1 :(得分:4)

strcmp如果string1按字母顺序小于string2,则返回'小于0的值; zero,如果他们是平等的;如果字符串1按字母顺序大于字符串2,则'值大于0'

答案 2 :(得分:4)

引用手册页:

  

如果找到s1(或其前n个字节),则strcmp()和strncmp()函数返回小于,等于或大于零的整数,小于,匹配或为大于s2。

换句话说,您永远不应该依赖strcmp的确切返回值(当然不是0)。唯一的保证是,如果第一个字符串是&#34;较小&#34;则返回值为负,如果第一个字符串是&#34;更大&#34;则返回正数。或0如果他们是平等的。相同的输入可能会在strcmp的不同实现的不同平台上生成不同的结果。

答案 3 :(得分:3)

输出取决于实现。 strcmp函数的一个不错的实现是:

int strcmp (const char * s1, const char * s2)
{
    for(; *s1 == *s2; ++s1, ++s2)
        if(*s1 == 0)
            return 0;
    return *(unsigned char *)s1 < *(unsigned char *)s2 ? -1 : 1;
}

如果s1&lt;上述实现返回-1。 s2,1如果s1> s2和0如果s1 = s2 但通常情况下,有一个更快的版本可供实际使用:

int strcmp (const char * s1, const char * s2)
{
    for(; *s1 == *s2; ++s1, ++s2)
        if(*s1 == 0)
            return 0;
    return *(const unsigned char *)s1 - *(const unsigned char *)s2;
}

请注意,这样做会更快,因为它会跳过之前完成的分支。因此,我们通常认为负回报值意味着s1在字典上小于s2,而正值则反之亦然。

答案 4 :(得分:1)

int strcmp(const char *str1, const char *str2)

将返回小于,等于或大于0的值。如果返回0则表示两个字符串相等,如果返回小于0的值,则表示str1小于str2。如果它返回值> 0表示str2小于str1。

您的返回值为1,因为&#34; Heloooo&#34;是一个字符然后&#34; Helloo&#34;。 事实上,Helloo这个词有6个字符,而Heloooo有7个字符。恰好还有一个字符。

答案 5 :(得分:-1)

基本上,strcmp()可以返回以下内容:

  • > 0如果第二个字符串小于第一个第一个字符串。

    char s1, s2; strcpy (s1, "helloworld"); strcpy (s2, "world"); int check = strcmp (s1, s2);

  • 0如果传递的字符串相同。

    char s1, s2; strcpy (s1, "hello"); strcpy (s2, "hello"); int check = strcmp (s1, s2);

    在这种情况下,由于字符串相同,请检查0

  • < 0如果第一个字符串小于第二个字符串。

    char s1, s2; strcpy (s1, "hello"); strcpy (s2, "worldhello"); int check = strcmp (s1, s2);

因此,在您的情况下,strcmp ()将返回1,因为字符串不相等。

查看有关thisthisstrcmp ()教程。