Const char和split函数

时间:2018-02-16 11:05:51

标签: c++

这是我的分割功能:

std::vector<std::string> split(std::string& s, const char delimiter, bool ignore_empty = false){

      std::vector<std::string> result;
      std::string tmp = s;

      while(tmp.find(delimiter) != std::string::npos) {
            std::string new_part = tmp.substr(0, tmp.find(delimiter));
            tmp = tmp.substr(tmp.find(delimiter)+1, tmp.size());

            if(not (ignore_empty and new_part.empty())) {
                  result.push_back(new_part);
            }
      }
      if(not (ignore_empty and tmp.empty())){
      result.push_back(tmp);
      }
return result; }

我正在调用这样的分割函数:

vector<std::string> tiedot = split(line, ";", true);

该行是: 的 S-市场; Hervantakeskus;香肠; 3.25

我需要将字符串拆分为字符串并将它们添加到矢量中但我得到了这个

  

错误:从const char *到char

的转换无效

你知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

这是我几个月前在stackoverflow上找到的分割函数。

std::vector<std::string> fSplitStringByDelim(const std::string &text, char sep) 
{    
std::vector<std::string> tokens;
size_t                   start = 0, end = 0;

//until u find no more delim
while ((end = text.find(sep, start)) != std::string::npos)
{
    //if string not empty
    if(text.substr(start, end - start) != "")
    {   
        //push string
        tokens.push_back(text.substr(start, end - start));
    }

    start = end + 1;
}
//avoid empty string
if(text.substr(start) != "")
{
    tokens.push_back(text.substr(start));
}
return tokens;
}

您可以使用以下方式调用此函数:

vector<std::string> tiedot = fSplitStringByDelim(line, ';');

答案 1 :(得分:1)

试试这个

vector<std::string> tiedot = split(line, ';', true);