如何确定字符串是否包含在std :: vector的任何字符串中?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何确定字符串是否包含在std :: vector的任何字符串中?相关的知识,希望对你有一定的参考价值。

有一个主机名向量,我想拉出任何包含来自另一个向量的字符串的主机名。

假设我有一个包含主机名和IP地址的2D向量:

std::vector<std::vector<string>> hostnames = {{"Mike-computer","1.2.3.4"}, 
                                         {"John-computer","5.6.7.8"}, 
                                         {"Monica-computer","9.10.11.12"}};

另一个包含目标主机名的向量:

std::vector<string> targets = {"Mike", "Sophia"};

如果hostnames向量中的任何行包含"Mike""Sophia",请拉出其信息。在这个例子中,"Mike-Computer"将被删除,因为它包含来自我的"Mike"向量的targets

我在this thread上发现我可以在我的std::find矢量上使用targets,但如果它不是完全匹配则不会起作用。它只会在我特别说"Mike-computer"但我不知道我查询的计算机的完整主机名时才有效。

这是一段代码:

for (std::vector<std::vector<std::string>>::iterator row = hostnames.begin(); row != hostnames.end(); ++row)
{
    for (std::vector<std::string>::iterator col = row->begin(); col != row->end(); ++col)
    {
        if ((std::find(targetsList.begin(), targetsList.end(), *col) != targetsList.end()))
        {
            std::cout << *col << " is a match" << std::endl;
        }
    }
}
答案

std::string有一个find成员函数,可以查找字符串是否存在于另一个字符串中。您可以使用它来查看主机名是否包含目标名称

for (const auto& host : hostnames)
{
    for (const auto& target : tagets)
    {
        if (host[0].find(target) != std::string::npos)
            std::cout << "Found: " << host[0] << " with IP: " << host[1];
    }
}

我还想建议,如果你总是只有一个主机名和IP对,你使用一个实际的数据结构,如

struct Computer
{
    std::string name;
    std::string IP;
};

以便

if (host[0].find(target) != std::string::npos)
    std::cout << "Found: " << host[0] << " with IP: " << host[1];

看起来像

if (host.name.find(target) != std::string::npos)
    std::cout << "Found: " << host.name << " with IP: " << host.IP;

或者在leas使用std::pair<std::string, std::string>,因此代码中没有“魔术数字”。

以上是关于如何确定字符串是否包含在std :: vector的任何字符串中?的主要内容,如果未能解决你的问题,请参考以下文章

如何从向量向量中检索值?

如何确定`range :: view`对象和`std :: vector`之间的等价?

如何检查 std::vector 超出范围的访问

在 C++ 中检查 std::vector<string> 是不是包含某个值 [重复]

如何在不导致复制的情况下将 char 数据附加到 std::vector

如何创建 C++ 用户定义的类,以便该类的 std::vector 不包含该类的某些成员