你可以使用这样的东西:
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。希望能帮助到你。