每个循环从基本字符串转换为向量内部

时间:2017-03-21 15:39:35

标签: c++ string c++11 vector

 vector<string> compactRepresent (){
    bool matched = false; 
    string dif = "";
    string currentDif = "";
    vector <string> text;

    unsigned int i, j;
    for (i = 0; i < vec[0].size(); ++i)
    {
        for (j = 1; j < vec.size(); ++j) 
        {
            if (vec[0][i] != vec[j][i])
            {
                if (find(currentDif.begin(), currentDif.end(), vec[0][i]) == currentDif.end()) 
                {
                    currentDif += vec[0][i];
                }
                if (find(currentDif.begin(), currentDif.end(), vec[j][i]) == currentDif.end()) 
                {
                    currentDif += vec[j][i];
                }
                matched = true;
            }
        }
        if (matched)
        {
            dif += " {" + currentDif + "} ";
            currentDif = "";
            text.push_back(dif);
            matched = false;
        } 
        else 
        {
            dif += vec[0][i];
            currentDif = "";
            text.push_back(dif);
            matched = false;
        }
    }
    cout << dif << endl;
   return text;
}

int match (vector<string> patterns){

    vector<string> allSegment = compactRepresent();
    vector<int> matchLists;

    for(string smallPatt : patterns)
    {
        EDSM edsm(smallPatt);

        for(vector<string> segments: allSegment)
        {
            edsm.searchNextSegment(segments);
            edsm.getMatches();
        }
            matchLists = edsm.getMatches(); 
    }

    for(const int m: matchLists)
    {
    cout << m << endl;
    }
    return 0; 
 }

第一种方法 compactRepresent 以紧凑的方式表示多个序列,而对于第二种方法匹配,它尝试使用某种方法查找匹配。

我的问题是,当我通过所有段遍历每个段时,它会给出数据类型错误,如下所示:

error: conversion from ‘std::__cxx11::basic_string<char>’ to non-scalar type ‘std::vector<std::__cxx11::basic_string<char> >’ requested
      for(vector<string> segments: allSegment)

谢谢。

1 个答案:

答案 0 :(得分:1)

鉴于此变量定义:

vector<string> allSegment;

这个循环毫无意义:

for(vector<string> segments: allSegment)

您要求对vector<string>进行枚举,但是要说您要将每个元素分配到vector<string>变量中。因为每个元素都是string,所以编译器假定您要将每个string元素转换为vector<string>,但没有这种隐式转换,因此错误。

将循环更改为:

for(string segments: allSegment)

请注意,即使这样也可以改进,因为在枚举向量内容时,您正在复制向量中的每个字符串。考虑对每个字符串进行const引用,只在需要时进行复制:

for(string const &segments: allSegment)