Я не понимаю, как это работает. Почему это так? И как мы сравниваем символы в C, как я могу понять, какой из них меньше или больше других?
Это из книги.
Вызов функции compareStrings
и вернуть значение –1, если первая строка лексикографически меньше второй строки, 0, если две строки равны, и 1, если первая строка лексикографически больше
чем вторая строка. Итак, вызов функции
compareStrings ("alpha", "altered")
возвращает значение –1, поскольку первая строка лексикографически меньше второй
строка (думаю, это означает, что первая строка находится перед второй строкой в словаре).
вызов функции
compareStrings ("zioty", "yucca");
возвращает значение 1, потому что «zioty» лексикографически больше, чем «юкка».
#include <stdio.h>
#include <stdbool.h>
struct entry
{
char word[15];
char definition[50];
};
bool equalStrings(char s1[], char s2[])
{
bool areEqual = false;
int i = 0;
while(s1[i] != '\0' && s2[i] != '\0' && s1[i] == s2[i])
i++;
if(s1[i] == '\0' && s2[i] == '\0')
areEqual = true;
else
areEqual = false;
return areEqual;
}
int lookup (struct entry dictionary[], char search[],int entries)
{
int low = 0;
int high = entries - 1;
int mid, result;
while (low <= high)
{
mid = (low + high) / 2;
result = compareStrings (dictionary[mid].word, search);
if(result == -1)
low = mid + 1;
else if(result == 1)
high = mid - 1;
else
return mid;
}
return -1;
}
int compareStrings(char s1[], char s2[])
{
int i = 0, answer;
while(s1[i] == s2[i] && s1[i] != '\0' && s2[i] != '\0')
i++;
if(s1[i] < s2[i])
answer = -1;
else if(s1[i] == s2[i])
answer = 0;
else
answer = 1;
return answer;
}
int main()
{
struct entry dictionary[100] =
{
{"aardvark", "a burrowing African mammal" },
{"acumen", " a bottomless pit "},
{"addle", "to become confused "},
{"agar", "a jelly made from seaweed" }
{"affix", "to append; attach"}
};
char word[15];
int entries = 10;
int entry;
printf("Enter word: ");
scanf("%14s", word);
entry = lookup (dictionary, word, entries);
if(entry != -1)
printf("%s\n", dictionary[entry].definition);
else
printf("Sorry, the word %s is not in my dictionary.\n", word);
return 0;
}
Как понять, что одно больше другого? Благодаря.