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

C++ 2011 提供了一个正则表达式库。如果您还不能使用 C++ 2011,您可以使用Boost.Regex库或任何 C 库,如PCRE

于 2012-06-30T17:22:51.317 回答
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 回答