我在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.为什么?
答案 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
,因为字符串不相等。