使用字符串分隔符(标准C ++)在C ++中解析(拆分)字符串

这个问题在这里已经有了答案:

  • 迭代字符串最优雅的方式[已关闭] 74个答案

  • 您可以使用std::string::find()函数来查找字符串分隔符的位置,然后使用std::string::substr()来获取令牌。

    例:

    std::string s = "scott>=tiger";
    std::string delimiter = ">=";
    std::string token = s.substr(0, s.find(delimiter)); // token is "scott"
    
  • find(const string& str, size_t pos = 0)函数返回字符串中str的第一个出现位置,如果找不到字符串,则npos

  • substr(size_t pos = 0, size_t n = npos)函数返回对象的一个​​子串,从位置pos开始,长度为npos


  • 如果你有多个分隔符,在你提取了一个标记之后,你可以删除它(包括分隔符)以继续后续的提取(如果你想保留原始字符串,只需使用s = s.substr(pos + delimiter.length()); ):

    s.erase(0, s.find(delimiter) + delimiter.length());
    

    这样你可以很容易地循环获取每个令牌。

    完整的例子

    std::string s = "scott>=tiger>=mushroom";
    std::string delimiter = ">=";
    
    size_t pos = 0;
    std::string token;
    while ((pos = s.find(delimiter)) != std::string::npos) {
        token = s.substr(0, pos);
        std::cout << token << std::endl;
        s.erase(0, pos + delimiter.length());
    }
    std::cout << s << std::endl;
    

    输出:

    scott
    tiger
    mushroom
    

    该方法使用std::string::find而不用通过记住前一个子串标记的开始和结束来改变原始字符串。

    #include <iostream>
    #include <string>
    
    int main()
    {
        std::string s = "scott>=tiger";
        std::string delim = ">=";
    
        auto start = 0U;
        auto end = s.find(delim);
        while (end != std::string::npos)
        {
            std::cout << s.substr(start, end - start) << std::endl;
            start = end + delim.length();
            end = s.find(delim, start);
        }
    
        std::cout << s.substr(start, end);
    }
    

    你可以使用下一个函数来拆分字符串:

    vector<string> split(const string& str, const string& delim)
    {
        vector<string> tokens;
        size_t prev = 0, pos = 0;
        do
        {
            pos = str.find(delim, prev);
            if (pos == string::npos) pos = str.length();
            string token = str.substr(prev, pos-prev);
            if (!token.empty()) tokens.push_back(token);
            prev = pos + delim.length();
        }
        while (pos < str.length() && prev < str.length());
        return tokens;
    }
    
    链接地址: http://www.djcxy.com/p/19559.html

    上一篇: Parse (split) a string in C++ using string delimiter (standard C++)

    下一篇: C# Split A String By Another String