ОБСУЖДЕНИЕ

Strcmp()

5 ответов 5,8 тыс.
Автор темы
Функция Strcmp() сравнивает строку s2 со строкой s1.Если строка s1 лексикографически меньше строки s2,возращает отрицательное число.
В смысле каждый раз любое произвольное отрицательное число?или определенное?
 
backspace
Тебе сказано что - то про определенное число? Каждый раз любое. Как правило, знать ,какое именно там число нам вообще не нужно. Просто проверяем, больше нуля или меньше.
 
Есть не проверенное подозрение, что возвращается разность сиволов, поскольку каждому символу соответсвует порядковый номер в соответсвии с таблицой ASCII, так символы можно вычитать:

C++:
cout << (int) 'z' << endl;
cout << (int) 'a' << endl;

int rez = 'z' - 'a';

Результат будет положительное число.
 
Код:
int
strcmp(s1, s2)
register const char *s1, *s2;
{
while (*s1 == *s2++)
if (*s1++ == 0)
return (0);
return (*(const unsigned char *)s1 - *(const unsigned char *)(s2 - 1));
}
http://fxr.watson.org/fxr/source/libkern/strcmp.c
:)

интересно, почему там именно (s2 - 1)?
;)
 
интересно, почему там именно (s2 - 1)?
Потому что после выхода из цикла (не важно, по какой причине) из-за инкремента s2 указывает на символ, следующий за проверенным/нужным.
 
А зачем так тему то развили :-)
Ну глупо же, все таки сравнение булева-функция... 3 варианта =, <,>.. И все тут, больше еще впринципи использовать ни где нельзя :)