c ++字符串拆分字符串?

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

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

  • stringstream可以完成所有这些。

  • 拆分一个字符串并存储到int数组中:

    string str = "102:330:3133:76531:451:000:12:44412";
    std::replace(str.begin(), str.end(), ':', ' ');  // replace ':' by ' '
    
    vector<int> array;
    stringstream ss(str);
    int temp;
    while (ss >> temp)
        array.push_back(temp); // done! now array={102,330,3133,76531,451,000,12,44412}
    
  • 在处理之前从字符串中删除不需要的字符,如$# :就像上面的处理方式:


  • C中的标准方式是像其他人已经回答的那样使用strtok 。 但是strtok不是C++类的,也是不安全的。 C ++中的标准方式是使用std::istringstream

    std::istringstream iss(str);
    char c; // dummy character for the colon
    int a[8];
    iss >> a[0];
    for (int i = 1; i < 8; i++)
        iss >> c >> a[i];
    

    如果输入总是有固定数量的令牌, sscanf可能是另一个简单的解决方案

    std::sscanf(str, "%d:%d:%d:%d:%d:%d:%d:%d", &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8);
    

    我不得不在写这样的代码之前,发现Stack Overflow的问题是用分隔符来分割一个字符串。 这是原始问题:链接。

    你可以用std::stoi来构建矢量。

    std::vector<int> split(const std::string &s, char delim) {
        std::vector<int> elems;
        std::stringstream ss(s);
        std::string number;
        while(std::getline(ss, number, delim)) {
            elems.push_back(std::stoi(number));
        }
        return elems;
    }
    
    // use with:
    const std::string numbers("102:330:3133:76531:451:000:12:44412");
    std::vector<int> numbers = split(numbers, ':');
    

    这是一个有效的ideone示例。

    链接地址: http://www.djcxy.com/p/19571.html

    上一篇: c++ Split string by a character?

    下一篇: Splitting a string by whitespace in c++