C++ C++;在输入中查找字符串并使用运算符

C++ C++;在输入中查找字符串并使用运算符,c++,string,operators,C++,String,Operators,我一直在试图找到一种在cmd中使用字符串输入的方法,只要这些字符串存在,cmd的输出就会发生。下面是一些代码,这些代码可以正常工作,但仍然存在一些问题 if (text.find("floor") && text.find("knife")!=std::string::npos) { std::cout << "Knife and Floor test" << std::endl; } if (text.fi

我一直在试图找到一种在cmd中使用字符串输入的方法,只要这些字符串存在,cmd的输出就会发生。下面是一些代码,这些代码可以正常工作,但仍然存在一些问题

    if (text.find("floor") && text.find("knife")!=std::string::npos)
    {
        std::cout << "Knife and Floor test" << std::endl;
    }
    if (text.find("knife") !=std::string::npos)
    {
        std::cout << "just knife" << std::endl;
    }
有什么想法吗?谢谢大家!

试试下面的方法

    if ( text.find( "floor" ) != std::string::npos && 
         text.find( "knife" ) != std::string::npos )
    {
        std::cout << "Knife and Floor test" << std::endl;
    }
    else if ( text.find( "knife" ) != std::string::npos )
    {
        std::cout << "just knife" << std::endl;
    }

//...

        if ( text.find( "can" ) != std::string::npos )
        {
            if ( text.find( "elizabeth" ) != std::string::npos )
            {
                if ( text.find( "you" ) != std::string::npos )
                {
                    std::cout << "1912" << std::endl;
                }
            }
        }
        else if ( text.find( "elizabeth" ) != std::string::npos )
        {
            std::cout << "just elizabeth" << std::endl;
        }


if( ( text.find( "this" ) != std:;string::npos &&
      ( text.find("word" ) != std::string::npos  ||
        text.find( "thisword" )!= std::string::npos ) )

{

      run

}

第一个if语句可以用以下方式重写

if ( text.find( "knife" ) != std::string::npos )
{
    if ( text.find( "floor" ) != std::string::npos ) 
    {
        std::cout << "Knife and Floor test" << std::endl;
    }
    else 
    {
        std::cout << "just knife" << std::endl;
    }
}
if(text.find(“刀”)!=std::string::npos)
{
if(text.find(“floor”)!=std::string::npos)
{
标准::cout
只需输入“刀”即可进行“刀和地板测试”和“仅
刀。”

那么这是什么呢?

if (text.find("floor") && text.find("knife")!=std::string::npos)
{
    std::cout << "Knife and Floor test" << std::endl;
}
本节:

if (text.find("can") !=std::string::npos)
{
    if (text.find("elizabeth") !=std::string::npos)
    {
        if (text.find("you") !=std::string::npos)
        {
            std::cout << "1912" << std::endl;
        }
    }
}
if (text.find("elizabeth") !=std::string::npos)
{
    std::cout << "just elizabeth" << std::endl;
}
if(text.find(“伊丽莎白”)!=std::string::npos)
{

std::cout您可以创建一些帮助函数,以便更容易地测试字符串是否匹配字符串列表中的某个内容(
find_any()
),或者匹配列表中的所有项目(
find_all()

find_all()
find_any()
可以通过变量参数模板函数实现,但也有其他方法:

enum FIND_X { FIND_ALL, FIND_ANY };

template <typename... Strings>
bool find_any (std::string haystack, Strings... args) {
    return find_x<FIND_ANY, Strings...>(haystack, args...);
}

template <typename... Strings>
bool find_all (std::string haystack, Strings... args) {
    return find_x<FIND_ALL, Strings...>(haystack, args...);
}

template <FIND_X, typename T>
bool find_x (std::string haystack, T s) {
    return findx(haystack, s);
}

template <FIND_X OP, typename T, typename... Strings>
bool find_x (std::string haystack, T s, Strings... args) {
    if (haystack.find(s) != haystack.npos) {
        if (OP == FIND_ANY) return true;
    } else {
        if (OP == FIND_ALL) return false;
    }
    return find_x<OP, Strings...>(haystack, args...);
}
enum FIND_X{FIND_ALL,FIND_ANY};
模板
bool find_any(std::string haystack、Strings…args){
返回find_x(haystack,args…);
}
模板
bool find_all(std::string haystack、Strings…args){
返回find_x(haystack,args…);
}
模板
bool find_x(标准::字符串haystack,ts){
返回findx(干草堆,s);
}
模板
bool find_x(std::string haystack、ts、Strings…args){
if(haystack.find(s)!=haystack.npos){
如果(OP==FIND_ANY)返回true;
}否则{
如果(OP==FIND_ALL)返回false;
}
返回find_x(haystack,args…);
}

你的第一个例子正是我想要的!讨厌它这么简单!谢谢!太棒了。当我不止一次使用字符串时,比如使用刀子的例子,我是否需要记住“if-else”呢?至于为什么事情不起作用,这和为什么不起作用一样。谢谢!将用屏幕打印来记录。
text.find(“地板”)和&text.find(“刀”)!=std::string::npos这是不对的。你需要将两者分别与npos进行比较。有趣。使事情更简单、更精确。我可以用很多方法来使用它。我必须进行试验,并找到真正利用这一切的方法。巨大的帮助!谢谢!
if (text.find("floor") && text.find("knife")!=std::string::npos)
{
    std::cout << "Knife and Floor test" << std::endl;
}
if (text.find("can") !=std::string::npos)
{
    if (text.find("elizabeth") !=std::string::npos)
    {
        if (text.find("you") !=std::string::npos)
        {
            std::cout << "1912" << std::endl;
        }
    }
}
if (text.find("elizabeth") !=std::string::npos)
{
    std::cout << "just elizabeth" << std::endl;
}
    if (find_all(text1, "knife", "floor")) {
        std::cout << "knife and floor test pass 1\n";
    }

    if (!find_all(text2, "knife", "floor")) {
        std::cout << "knife and floor test pass 2\n";
    }

    if (!find_all(text3, "knife", "floor")) {
        std::cout << "knife and floor test pass 3\n";
    }

    if (find_any(text2, "knife", "floor")) {
        if (findx(text2, "knife")) {
            std::cout << "knife or floor found knife\n";
        }
    }

    if (find_any(text3, "knife", "floor")) {
        if (findx(text3, "floor")) {
            std::cout << "knife or floor found floor\n";
        }
    }
bool findx (std::string haystack, std::string s) {
    return haystack.find(s) != haystack.npos;
}
enum FIND_X { FIND_ALL, FIND_ANY };

template <typename... Strings>
bool find_any (std::string haystack, Strings... args) {
    return find_x<FIND_ANY, Strings...>(haystack, args...);
}

template <typename... Strings>
bool find_all (std::string haystack, Strings... args) {
    return find_x<FIND_ALL, Strings...>(haystack, args...);
}

template <FIND_X, typename T>
bool find_x (std::string haystack, T s) {
    return findx(haystack, s);
}

template <FIND_X OP, typename T, typename... Strings>
bool find_x (std::string haystack, T s, Strings... args) {
    if (haystack.find(s) != haystack.npos) {
        if (OP == FIND_ANY) return true;
    } else {
        if (OP == FIND_ALL) return false;
    }
    return find_x<OP, Strings...>(haystack, args...);
}