2014-01-10 4 views
1

У меня проблема с strcmp в моей программе.
Я пытаюсь сравнить две строки по их длине, поэтому я использую strcmp() для этого, но когда я сравниваю их в инструкции if, это не работает.strcmp не работает в моем коде

Не сравнивает 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; 
} 
+3

Почему вы думаете, 'a' больше, чем' c'? –

+0

a cosist 8 символов, в то время как c is 7. –

+4

И где в документации 'strcmp' говорится, что он сравнивает строки по их длине? –

ответ

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

Я добавил свой код к моему, но ничего не печатает. –

+0

@ s12b11 Это потому, что '\ n' отсутствует в конце строки, как в вашем коде, так и в моем. Когда это произойдет, выход должен быть «сброшен» перед выходом из программы, иначе вы не увидите выход. Здесь [ссылка на демонстрационную версию, где исправлена ​​эта проблема] (http://ideone.com/bVcmbm). – dasblinkenlight

2

strcmp сравнивает строки, основанные на их lexicographic ordering, который напоминает путь слова расположены в словаре. По этому заказу строка "science" больше, чем "computer". Неверно, что strcmp сравнивает строку по их длине.

strcmp считать str1 менее, чем str2, если выполнено одно из следующих условий:

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

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

+0

Знаете ли вы хорошие сайты для изучения c с начала? –

+1

Если вы новичок, то прежде чем предлагать какие-либо сайты, я хотел бы предложить вам начать с хорошей книги.Вы можете взломать [C Primer Plus] (http://www.amazon.com/C-Primer-Plus-5th-Edition/dp/0672326965). Это хорошая книга для начинающих. Но если вам нужен какой-то сайт, я предлагаю вам прочитать [c_FAQ] (http://www.c-faq.com/) и [C Примечания к программированию] (http://www.eskimo.com/~scs/ cclass/krnotes/top.html). – haccks

+0

Я добавил код @dasblinkenlight для моего, но ничего не печатает. –

Смежные вопросы