わかりました、この問題は一日中私を悩ませていて、解決策を見つけることができないようです. 長い投稿であることは承知していますが、ご協力いただけると幸いです。私は、.dat ファイルから読み込み、キーワードのライブラリを作成するチャットボット プログラムに取り組んでいます。オブジェクト指向のアプローチを採用して、「Keyword」というクラスを定義しました。クラス定義を以下に示します。
class Keyword
{
public:
//_Word holds keyword
vector<string> _Word;
//_Resp holds strings of responses
vector<string> _Resp;
//_Antymn holds words that are the opposite to keyword
vector<string> _Antymn;
// Constructor
Keyword()
{
// Clears members when new instance created
_Word.clear();
_Resp.clear();
_Antymn.clear();
}
};
したがって、.dat ファイルで新しいキーワードが見つかるたびに、class キーワードの新しいインスタンスを作成する必要があります。キーワードのこれらすべてのインスタンスを格納するために、別のベクトルを作成しますが、今回は Keyword 型でライブラリと呼びます。
typedef vector<Keyword> Lib;
Lib library;// this is the same as saying vector<Keyword> library
これが私が抱えている問題です: ユーザーが文字列を入力した後、その文字列にライブラリのキーワードが含まれているかどうかを確認する必要があります。つまり、_Word の文字列がユーザー入力に表示されるかどうかを確認する必要があります。あなたが持っているベクトルの階層からそれを見る:
The top level --> libary //*starting point
--> Keyword
--> _Word
-->"A single string" <-- I want to reference this one
--> _Resp
-->"Many strings"
--> _Antymn
-->"Many strings"
ふぅ!それが理にかなっていることを願っています。これは私が書き始めたコードです:
size_t User::findKeyword(Lib *Library)
{
size_t found;
int count = 0;
for(count = 0; count<Library->size(); count++)
{
found = _Input.find(Library->at(count)); // this line needs to reference _Word from each keyword instance within library
if(found!= string.npos)
return found;
}
return 0;
}
「operator[]」メソッドも使用しようとしましたが、それも私が望むことをしていないようです。誰にもアイデアはありますか?もしそれができなかったら、私は非常に驚くだろう。前もって感謝します。