我的程序中有 strcmp 的问题 我试图按照它们的长度比较两个字符串,所以我使用strcmp(),但是当我在if语句中比较它们时它不能正常工作。
strcmp不比较字符串的长度吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
char a[30],b[30],c[30];
strcpy(a,"computer");
strcpy(c,"science");
strcpy(b,a);
puts(a);
puts(c);
puts(b);
if(strcmp(a,b)==0)
printf("a=b\n");
if(strcmp(a,c)<0)
printf("a<c\n");
if(strcmp(a,c)>0)
printf("a>c");
strcat(a,c);
puts(a);
getch();
return 0;
}
答案 0 :(得分:5)
strcmp
比较字符串按字典顺序(对于由同一寄存器中的字母组成的字符串,它与按字母顺序进行比较相同)。因此,"computer"
小于,不大于"science"
,因为它的字母顺序较早。
如果您想比较两个字符串的长度而不是比较字符串本身,则应使用strlen
:
if(strlen(a) == strlen(b))
printf("a=b\n");
if(strlen(a) < strlen(c))
printf("a is shorter than c\n");
if(strlen(a) > strlen(c))
printf("a is longer than c");
答案 1 :(得分:2)
strcmp
根据lexicographic ordering比较字符串,这类似于字词排列的方式。通过此排序,字符串"science"
大于"computer"
。 strcmp
根据长度来比较字符串是不正确的。
strcmp
会认为str1
小于str2
;
i
和str1
的第一个str2
字符匹配,(i+1)
st 字符str1
小于(i+1)
的{{1}} st 字符。
例如:str2
小于abc
。
abd
的所有字符都与str1
匹配,但str2
的字符长度({1}}比str1
的字符短。
例如:s2
小于abc
。