Non è una cosa immediatissima, ecco...
io andrei per gradi:
1)leggo una riga dal file e la inserisco in una stringa
2)effettuo un ciclo controllando che nella stringa letta ci siano dentro caratteri da splittare come '(', ',' e mi ricavo le parole in questo modo, andandole poi ad inserire in un vettore di vettori
int ROW_DIM = 255;
std::string rigaLetta; //riempita dalla lettura su file ovviamente
std::ifstream infile("miofile.txt");
int i = 0;
std::vector<std::string> resultRow;
std::vector<std::vector<std::string>> resultMatrix;
std::string tmpStr;
char tmpCar;
while(infile)
{
infile.getline(rigaLetta, ROW_DIM);
for(; i < rigaLetta.length(); i++)
{
tmpStr = "";
tmpCar = rigaLetta[i];
if(tmpCar == '(' || tmpCar == ' ' ...etc)
{
resultRow.push_back(tmpStr);
}
else //ci deve entrare anche quando trova caratteri '-'
{
tmpStr += tmpCar;
}
}
resultMatrix.push_back(resultRow);
}
PS: Bada che il codice l'ho scritto al momento e non l'ho nemmeno testato, quindi potrebbe avere qualche bug. Il procedimento comunque è quello corretto.