【发布时间】:2013-02-10 17:41:57
【问题描述】:
下面的这个函数简单地接受一个用64位整数填充的字符串,每个值用分隔符分隔,将放入向量中。
vector<unsigned long long int> getAllNumbersInString(string line, char delim){
vector<unsigned long long int> v;
string word;
stringstream stream(line);
unsigned long long int num;
while(getline(stream, word, delim))
num = atol(word.c_str());
v.push_back(num);
}
return v;
}
这个函数可以很好地工作,例如,我们有','作为分隔符,但是,如果字符串变量“line”中的数据是这样的,分隔符将失败:
432 12332 2234 12399
虽然数据似乎使用空格作为分隔符,但使用上面的代码,整个代码将在逻辑上失败。例如,空白之间的空白是未定义的,atol 将返回 0,并将这些 0 放入向量中。
为了更好地防范这些异常,我应该在这段代码中采取哪些措施?
【问题讨论】:
-
也许
stream >> num就足够了?
标签: c++ string error-handling delimiter