I'm writing a console app to ask the users for the edges of a graph and compute the MST for the give nodes but am having trouble parsing the input. The data is give in the form:
(node1,node2) weight
and the following code will extract the 2 nodes but I constantly get an out_of_range exception when trying to get the get the weight.
Everything I've read says I can call substr() with the start index alone and it will return a string from the index to the end of the string but that gives me the same exception. I've tried with a length of 1 when I provide a 4-digit weight (so I know I'm not running past the end of the string) and still get the same exception.Code:int main() { string cmd; int startIdx, endIdx, length; int vert1, vert2, weight; // command loop, ends with EOF cout << ": "; while(true) { cin >> cmd; // terminate on EOF if(cin.eof() != 0) { cout << endl; return 0; } // parse input length = cmd.capacity() - 1; startIdx = cmd.find('(', 0); endIdx = cmd.find(',', startIdx); vert1 = atoi((cmd.substr(startIdx + 1, endIdx - startIdx - 1)).c_str()); startIdx = endIdx; endIdx = cmd.find(')', startIdx); vert2 = atoi((cmd.substr(startIdx + 1, endIdx - startIdx - 1)).c_str()); startIdx = endIdx + 1; endIdx = length; weight = atoi((cmd.substr(startIdx + 1, endIdx - startIdx)).c_str()); cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); cout << "From: " << vert1 << " To: " << vert2 << " Weight: " << weight << endl; cout << ": "; } return 0; }
Could someone please explain what I'm not getting about substr()?
Thanks.
Jasen



LinkBack URL
About LinkBacks


