如何在string :: find中使用通配符?

时间:2012-06-30 17:10:07

标签: c++ wildcard

我希望能够在string::find中使用通配符,然后获取该通配符位置的内容。

例如:

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

所以,如果我问,“妈妈怎么样?”,输出结果将是“妈妈做得很好。”

我将使用哪些库,或者如何手动编写代码?如果我应该使用AIML,AIML可以执行.bat文件吗?

2 个答案:

答案 0 :(得分:5)

C ++ 2011提供regular expression library。如果您不能使用C ++ 2011,则可以使用Boost.Regex库或任何C库,如PCRE

答案 1 :(得分: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

给出的答案