strcmp在我的代码中不起作用

时间:2014-01-10 13:30:11

标签: c string strcmp

我的程序中有 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;
}

2 个答案:

答案 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;

  • istr1的第一个str2字符匹配,(i+1) st 字符str1小于(i+1)的{​​{1}} st 字符。
    例如:str2小于abc

  • abd的所有字符都与str1匹配,但str2的字符长度({1}}比str1的字符短。 例如:s2小于abc