本文目录一览:
C语言中strcmp的用法是什么?
int strcmp(char *str1, char *str2);\x0d\x0a\x0d\x0a比较字符串str1和str2是否相同。如果相同则返回0;\x0d\x0a如果不同,在不同的字符处如果str1的字符大于str2的字符,则返回1,否则返回-1\x0d\x0a比如:\x0d\x0achar a[]="abcd";\x0d\x0achar *b="abcd";\x0d\x0achar *d="abcde";\x0d\x0aint d=strcmp(a,b); //那么d的值是0\x0d\x0ad=strcmp(b,d); //d的值是-1 因为 '\0' 比'e' 小\x0d\x0ad=strcmp(d,b); //d的值是1,因为 'e' 比'\0'大
C语言中:strcmp函数如何使用?
原型:extern int strcmp(const char *s1,const char * s2);
用法:#include string.h
功能:比较字符串s1和s2。
相关函数:wcscmp
一般形式:strcmp(字符串1,字符串2)
说明:
当s1s2时,返回值0
当s1=s2时,返回值=0
当s1s2时,返回值0
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如:
"A""B" "a""A" "computer""compare"
特别注意:strcmp(const char *s1,const char * s2)这里面只能比较字符串,不能比较数字等其他形式的参数。
帮我写一个简易的strcmp函数(C语言)。
① c的strcmp简洁实现可以是这样的:
int strcmp(const char* s1, const char* s2)
{
while(*s1 (*s1==*s2))
s1++,s2++;
return *(const unsigned char*)s1-*(const unsigned char*)s2;
}
② strcmp的返回值可以有3种,即0, =0, 0 (任意一个数值),代表的含义分别是: str1 strcmp用的是二进制比较,意思是按字典顺序,比如: 字母a 字母 b;而a A。 (这是因为a的ascii码是97,而A的是65)。
理解了这个,上面的代码就好理解了。 while就是s1,s2从头到位一个一个字符的比较。如果s1为空,或者s1不等于s2,则中断循环 (s1不为空,s2为空,则是*s1 != *s2,退出循环)。返回值是循环中断时的字符(分别s1和s2对应的位置,*s1-*s2, 如果是上面说的 'a' - 'A', 那么返回的就是97-65=32),那么意味着a在A前面, strcmp 0。
之所以先转换成const unsigned char*再作减法,是由于c的char有三种: char, signed char 和unsigned char。 char就是'a'这样的, 而 signed char 则是-127~126之间的数值,而unsigned char则是0~255之间的一个值。 转换成unsigned char就是要“确保” 'a' --- 97。 你要不转换,也是可以的。
说明一点,很多c的lib实现,比如gnu c, 都是把结果处理成: -1, 0, 1, 而不是这个字符对应的ascii码的差值。
c语言中strcmp的用法
int
strcmp(char
*str1,
char
*str2);
比较字符串str1和str2是否相同。如果相同则返回0;
如果不同,在不同的字符处如果str1的字符大于str2的字符,则返回1,否则返回-1
比如:
char
a[]="abcd";
char
*b="abcd";
char
*d="abcde";
int
d=strcmp(a,b);
//那么d的值是0
d=strcmp(b,d);
//d的值是-1
因为
'\0'
比'e'
小
d=strcmp(d,b);
//d的值是1,因为
'e'
比'\0'大