你可以使用这样的东西:
PMatrix MatrixData::factory(string parser){
    typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
    // Verifica formattazione matrice
    if (!((parser[0]=='{' && parser[parser.size()-1] == '}')||(parser[0]=='[' && parser[parser.size()-1] == ']')))
        assert( (std::cout<<"Wrong matrix structure"<<std::endl, 0) );
     // Verifica struttura matrice
    boost::char_separator<char> row_sep("[]{};");
    boost::char_separator<char> col_sep(",");
    unsigned int row_number,col_number;
    tokenizer::iterator rowtok_iter;
    tokenizer::iterator coltok_iter;
    row_number = 0;
    tokenizer rowtokens(parser, row_sep);
    for (rowtok_iter = rowtokens.begin();rowtok_iter != rowtokens.end(); ++rowtok_iter)
        row_number++;
    col_number = 0;
    tokenizer coltokens(*rowtokens.begin(), col_sep);
    col_number = std::distance(coltokens.begin(),coltokens.end());
    //cout << row_number << " rows and " << col_number << " columns" << endl;
    unsigned int active_row_col_number;
    double* values = new double[col_number*row_number];
    unsigned int i = 0;
    for (rowtok_iter = rowtokens.begin();rowtok_iter != rowtokens.end(); ++rowtok_iter){
        active_row_col_number = 0;
        tokenizer coltokens1(*rowtok_iter, col_sep);
        for (coltok_iter = coltokens1.begin();coltok_iter != coltokens1.end();++coltok_iter){
            active_row_col_number++;
            values[i]=strtod(coltok_iter->c_str(),0);
            i++;
        }   
        if (active_row_col_number!=col_number)
             assert( (std::cout<<"Wrong matrix structure 1"<<std::endl, 0) );
    }   
    PMatrix ret = MatrixData::factory(row_number,col_number,values);
    delete[] values;
    return ret;
}
它直接从字符串中解析 Matlab 格式的矩阵并将结果放入“值”中。
这不是你能想象的最干净的代码,但它可以被清理掉。如您所见,它正在使用 boost::tokenizer。希望能帮助到你。