1

string::findワイルドカードを使用して、そのワイルドカードの場所にあったものを取得できるようにしたいと考えています。

例えば:

if (string::npos !=input.find("How is * doing?")
{
     cout<<"(the wildcard) is doing fine."<<endl;
}

だから、「ママは元気?」と聞いたら、「ママは元気です」と返ってきます。

これにはどのライブラリを使用しますか、またはコードを手動でどのように記述しますか? AIML を使用する必要がある場合、AIML は .bat ファイルを実行できますか?

4

2 に答える 2

5

手動で行う方法についての質問については、質問で示した例を解決するこの簡単なコードを使用してアイデアを提供します。

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string expr="How is * doing?";
    string input="How is Mom doing?";
    int wildcard_pos=expr.find("*");
    if(wildcard_pos!=string::npos)
    {
        int foo=input.find(expr.substr(0,wildcard_pos)),bar=input.find(expr.substr(wildcard_pos+1));
        if(foo!=string::npos && bar!=string::npos)
        cout<<input.substr(wildcard_pos,bar-wildcard_pos)<<" is doing fine\n";
    }
}

このアイデアは、ニーズに合わせて簡単に変更できます。そうでなければ、によって与えられた答えに従ってくださいsrc

于 2012-06-30T17:30:12.333 に答える
5

C++ 2011 は、正規表現ライブラリを提供します。C++ 2011 をまだ使用できない場合は、Boost.RegexライブラリまたはPCREなどの C ライブラリを使用できます。

于 2012-06-30T17:22:51.317 に答える