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 ответа

Решение

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");

strcmp сравнивает строки на основе их лексикографического порядка, который напоминает порядок слов в словаре. По этому порядку строка "science" больше, чем "computer", Это не правда, что strcmp сравнивает строки на основе их длины.

strcmp рассматривать str1 меньше, чем у str2 если любое из следующего верно;

  • Первый i персонажи str1 а также str2 матч, но (i+1)St характер str1 меньше, чем у (i+1)St характер str2,
    Пример: abc меньше, чем у abd,

  • Все персонажи str1 матч str2, но str1 короче (по длине), чем у s2,
    Пример: abc меньше чем abcd,

Другие вопросы по тегам