让我举一个例子:我有三组具有固定大小的字符串,我想使用列表。让我们说我把它们命名为Red,Green,Blue:
std::string Red[] = {"apple", "rose mary", "watermelon"};
std::string Green[] = {"cucumber", "avocado", "pine tree"};
std::string Blue[] = {"sea", "lake"};
我在这里找到了一些例子,我们在每个列表中搜索一个项目,如果字符串匹配,他们就会找到它,例如在那种情况下我应该有:
std::string myinput = "watermelon";
if (std::find(std::begin(Red), std::end(Red), myinput) != std::end(Red))
{
cout << "found " << myinput << " in Red" << endl;
}
好到目前为止,但我想要一些不同的东西: 我想用1000个元素扫描一个向量,myinput属于我这样访问的元素之一:
for (int j = 0; j < Vector.size(); j++){
if (Vector[j].message == contains a string from one of the groups ){
cout<< Vector[j].message << endl;}
}
Vector [j] .message将是一个具有以下格式的字符串:
"flag: She adores watermelon"
"flag: They visited the lake"
"flag: He has cucumber for salad"
"flag: Wacamole made of avocado"
您会看到子字符串标志在向量的所有字符串中都很常见。但是,西瓜并不存在于另一组字符串中。
目标是扫描每组列表并找到向量的元素 &#34; flag:她喜欢西瓜&#34; 列在 Red 组中。这不应该仅仅因为子串&#34;标记&#34;而在组黄色中列出。 此外,我希望子字符串包含组中声明的整个字符串,例如,如果Vector包含一个像&#34;标志的元素:植物有许多松树&#34; ,这不应该被列入绿色组,它应该是未分类的。
然后,这些信息应分类并以不同的颜色打印,红色先用红色等打印。
首先,您是否同意列表&#39;理念?你建议一个更有效的方法吗?您对子字符串搜索有何建议?
请原谅蹩脚的例子,如果标题中的描述不清楚。我是新手,正在寻找创意。
答案 0 :(得分:0)
您可以使用正则表达式。而不是:
{"apple", "rose mary", "watermelon"}
使用此:
std::regex red("apple|rose mary|watermelon");
然后为每个输入行:
if (std::regex_search(line, red)) {
// it's red
}
然后,您可以创建vector<pair<regex, string>>
并命名每个模式:
vector<pair<regex, string>> patterns = {
{"apple|rose mary|watermelon", "red"},
{"cucumber|avocado|pine tree", "green"},
{"sea|lake", "blue"},
};
通过这种方式,您可以轻松地遍历所有模式,并获得任何匹配的颜色。