Автозаполнение, без сомнения, полезный инструмент. Много раз при поиске чего-либо в Google я пишу первые несколько символов и позволяю ему завершить слово (а иногда и предложение) за меня.
В этой статье я опишу, как добавить автодополнение в ваше приложение на C++.
Предположим, у вас есть приложение, в котором вы хотите, чтобы пользователь ввел некоторый текст, и текст, который пользователь будет вводить, почти всегда будет частью набора слов или предложений, вы можете помочь пользователю, добавив автозаполнение, чтобы им просто нужно ввести первые несколько символов текста, и ваше приложение сделает это за них.
Мы будем называть этот набор слов или предложений словарем для пользовательского ввода. В этой статье наш словарь будет состоять из четырех технологических компаний, названия которых начинаются на букву «а»:
string DICTIONARY[] = { "alibaba", "alphabet", "amazon", "apple" };
Мы начинаем со сбора данных, введенных пользователем, и сохраняем их в переменной:
int main(int argc, char** argv) { string input; cin >> input; return 0; }
Далее выясняем, содержится ли введенный пользователем текст в словаре. Для этого мы пройдемся по элементам в словаре и для каждого проверим, содержит ли он введенный пользователем текст:
string getMatch(string text) { // returns the closest match in the DICTIONARY to text for (int i = 0; i < 4; i++) { if (contains(DICTIONARY[i], text)) { return DICTIONARY[i]; } } return text; }
Функция getMatch() просматривает словарь в поисках ближайшего подходящего элемента и возвращает его. Если ни один элемент не соответствует входному тексту, текст возвращается.
Чтобы проверить, содержит ли строка другую строку, мы используем функцию contains():
bool contains(string str1, string str2) { // returns true if str1 contains str2, else false return (str1.find(str2) != string::npos); }
Где npos означает до конца строки, то есть, если str2
не имеет индекса в str1
до тех пор, пока не будет достигнут конец str1
, то вернуть false.
Теперь мы можем получить это ближайшее совпадение в функции main() и вывести его в консоль:
int main(int argc, char** argv) { string input, closestMatch; cin >> input; closestMatch = getMatch(input); cout << closestMatch; return 0; }
Вот некоторые результаты тестирования приложения:
Как мы видим, приложение правильно завершает ввод пользователя, если в словаре есть совпадение. Если совпадения нет, ввод остается нетронутым.
Спасибо, что дошли до этого места. Полный код этого проекта можно найти здесь. Если у вас есть какие-либо комментарии или вопросы, пожалуйста, оставьте их ниже.