Поиск ключевого слова в строках С++

Я все еще довольно новичок в C++ и программировании, поэтому, возможно, я просто упускаю здесь что-то важное.

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

Например:

пользователь: до какого часа библиотека открыта? //чат-бот улавливает ключевое слово «открыть» и возвращает правильную функцию чат-бот: библиотеки открываются с 6 до 5

Это не должно быть так сложно, как мне кажется, заставить чат-бота сделать это.

Функция, с которой у меня проблемы:

std::string GetKeywords(){
std::string KQuery = GetQuery();


std::vector<std::string> keywords{"open", "opening", "times", "close", "closing", "shut"};


    if (std::find(keywords.begin(), keywords.end(), KQuery) != keywords.end()){
        std::cout << "Library is open when I say it is" << std::endl;
    }
return 0;
};

Это возвращает ошибку памяти и является единственным местом в моем коде, которое вызывает проблему.

Весь мой код:

#include <iostream>
#include <string>
#include <vector>

#include "FinalProject.hpp"

//introducing funtions
void PrintIntro();
std::string GetQuery();
std::string RunScripts();
std::string GetKeywords();;

// introducing chatbot
RunScript ChatBot;


int main(){

PrintIntro();
GetQuery();
GetKeywords();

};



void PrintIntro(){
    //printing introductory text to ask the user for input
std::cout << "Hi, I'm Librarius, I'm here to help you with University     library queries" << std::endl;
std::cout << "I can help you with the following: \n Spaces to study \n     Opening times \n Taking out books \n Returning books\n" << std:: endl;
std::cout << "Ask away!" << std::endl;
return;
};



std::string GetQuery(){
//getting input from the user
std::string Query = "";
std::getline(std::cin, Query);

if (Query.empty()){
    //checking to see if the user hasnt entered anything
    std::cout << "Hey! Why didnt you enter anything?! I don't want to waste my time!" << std::endl;
};

return Query;
};

std::string GetKeywords(){
std::string KQuery = GetQuery();


std::vector<std::string> keywords{"open", "opening", "times", "close", "closing", "shut"};


    if (std::find(keywords.begin(), keywords.end(), KQuery) != keywords.end()){
        std::cout << "Library is open when I say it is" << std::endl;
    }



return 0;
};

//using the input got from the user to decide which script to run

//TODO analyse the users keywords and decide on a script to run

//TODO return an appropriate script

Спасибо за вашу помощь!

Не весь ваш код: ..\main.cpp:5:10: fatal error: FinalProject.hpp: No such file or directory. На самом деле, мы бы предпочли минимальный воспроизводимый пример, чем весь ваш код.

Fred Larson 27.02.2019 22:29
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
1
219
1

Ответы 1

Проблема с

std::find(keywords.begin(), keywords.end(), KQuery)

собирается ли он увидеть, соответствует ли вся строка в KQuery одному из ваших ключевых слов. Поскольку в KQuery есть предложение, оно не найдет соответствия. Что вам нужно сделать, так это перебрать все ключевые слова и посмотреть, возвращает ли KQuery.find(keyword) допустимый результат.

Вы можете сделать это, используя std::find_if и лямбду, например

std::find_if (keywords.begin(), keywords.end(),
             [&](auto const& keyword){ return KQuery.find(keyword) != std::string::npos; });

Это вернет итератор к первому ключевому слову, которое он найдет в KQuery или keywords.end(), если ни одно из ключевых слов не найдено.

Другие вопросы по теме