Jim*_* P. 3 c++ string vector find
有一个主机名向量,我想拉出任何包含来自另一个向量的字符串的主机名.
假设我有一个包含主机名和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"}};
Run Code Online (Sandbox Code Playgroud)
另一个包含目标主机名的向量:
std::vector<string> targets = {"Mike", "Sophia"};
Run Code Online (Sandbox Code Playgroud)
如果hostnames向量中的任何行包含"Mike"或"Sophia",则拉出其信息.在这个例子中,"Mike-Computer"因为它包含"Mike"了我的targets向量,所以会被拉掉.
我在这个帖子上找到了我可以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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
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];
}
}
Run Code Online (Sandbox Code Playgroud)
我还想建议,如果你总是只有一个主机名和IP对,你使用一个实际的数据结构,如
struct Computer
{
std::string name;
std::string IP;
};
Run Code Online (Sandbox Code Playgroud)
以便
if (host[0].find(target) != std::string::npos)
std::cout << "Found: " << host[0] << " with IP: " << host[1];
Run Code Online (Sandbox Code Playgroud)
看起来像
if (host.name.find(target) != std::string::npos)
std::cout << "Found: " << host.name << " with IP: " << host.IP;
Run Code Online (Sandbox Code Playgroud)
或者在leas使用,std::pair<std::string, std::string>所以代码中没有"魔术数字".
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |