如何精确判断一个字符串是否隐匿于std::vector的众多字符串之中?

2026-04-16 19:474阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计587个文字,预计阅读时间需要3分钟。

如何精确判断一个字符串是否隐匿于std::vector的众多字符串之中?

有一个主机名指向向量,我想拉出一个包含来自另一个向量的字符字符串的主机名。假设我有一个包含主机名和IP地址的2D向量:std::vector hostnames={{Mike-computer, 1.2.3.4}, {John-computer}}。

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

假设我有一个包含主机名和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的众多字符串之中?

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

如果主机名矢量中的任何一行包含“Mike”或“Sophia”,请拉出其信息.在这个例子中,“Mike-Computer”将被拉掉,因为它包含来自我的目标向量的“Mike”.

我在this thread发现我可以在我的目标向量上使用std :: find,但如果它不是完全匹配则无法工作.它只会在我特意说“迈克计算机”但我不知道我查询的计算机的完整主机名时才有效.

这是一段代码:

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>所以代码中没有“魔术数字”.

本文共计587个文字,预计阅读时间需要3分钟。

如何精确判断一个字符串是否隐匿于std::vector的众多字符串之中?

有一个主机名指向向量,我想拉出一个包含来自另一个向量的字符字符串的主机名。假设我有一个包含主机名和IP地址的2D向量:std::vector hostnames={{Mike-computer, 1.2.3.4}, {John-computer}}。

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

假设我有一个包含主机名和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的众多字符串之中?

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

如果主机名矢量中的任何一行包含“Mike”或“Sophia”,请拉出其信息.在这个例子中,“Mike-Computer”将被拉掉,因为它包含来自我的目标向量的“Mike”.

我在this thread发现我可以在我的目标向量上使用std :: find,但如果它不是完全匹配则无法工作.它只会在我特意说“迈克计算机”但我不知道我查询的计算机的完整主机名时才有效.

这是一段代码:

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>所以代码中没有“魔术数字”.