Использование функции toupper - PullRequest
0 голосов
/ 17 ноября 2011

По сути, я создал двоичное дерево. Мое двоичное дерево будет содержать строки, которые могут иметь изменяющийся регистр, т. Е. Hello, hello, HELLO.

Мне нужно реализовать функцию, чтобы при обходе дерева, то есть при поиске имени, вводимого через пользователя, независимо от того, какой пользователь вводит регистр, он всегда найдет имя. поиск Здравствуйте, HELLO все равно будет найден и отображен, и наоборот.

В моем дереве используется рекурсивная структура, поэтому я не могу придумать простой способ реализации функции toupper или другого метода в моем коде.

Проблема в том, что мне нужно найти Томаса, даже если, например, введен Томас. Но я не знаю, где я могу реализовать такую ​​функцию, поскольку цель состоит не в том, чтобы манипулировать вводом в Дереве.

Любой совет велик:)

UPDATE:

else if ((comparison = strcmp(search, root->name)) == 0) {
    return root;
} else if ((comparison = strcmp(search, root->name)) < 0) {
     return SearchTree(root->left, search);
} else if ((comparison = strcmp(search, root->name)) > 0) 
     return SearchTree(root->right, search);    `

Это мои сравнения и рекурсивные вызовы. Поиск - это строка, содержащая пользовательский ввод, но добавление toupper к любому из этих рекурсивных вызовов приведет только к ошибке.

Томас.

Ответы [ 2 ]

2 голосов
/ 17 ноября 2011

Я предлагаю вам просто выполнить независимое от регистра сравнение (stricmp) при поиске в дереве.

Поскольку stricmp немного медленнее, чем strcmp, если дерево очень большое, вы должны всегда хранить ключи в нижнем регистре и делать то же самое со значением поиска, чтобы вы могли использовать strcmp везде .

0 голосов
/ 17 ноября 2011

В каждой точке вам нужно проводить сравнения символов (чтобы решить, соответствует ли что-то), конвертировать запрос и рассматриваемый символ в верхний или нижний регистр, используя функции из ctype.h (toupper или tolower)).Тот факт, что он рекурсивный, не должен иметь значения - вам нужно только согласовать регистр для отдельных символов, которые вы сравниваете в данный момент, а не для всей строки.

(РЕДАКТИРОВАТЬ: я неправильно понял исходный вопрос, который имеетпоскольку было уточнено и получено достаточно ответов)

Кроме того, использование бинарных деревьев для поиска строк странно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...