如何查找字符串向量中的子字符串是否包含在另一个组/向量/列表c ++中

时间:2018-02-07 09:41:08

标签: list c++11 vector find substring

让我举一个例子:我有三组具有固定大小的字符串,我想使用列表。让我们说我把它们命名为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;理念?你建议一个更有效的方法吗?您对子字符串搜索有何建议?

请原谅蹩脚的例子,如果标题中的描述不清楚。我是新手,正在寻找创意。

1 个答案:

答案 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"},
};

通过这种方式,您可以轻松地遍历所有模式,并获得任何匹配的颜色。