函数,用于在C++中高效解析带有分隔符的多个数字
Function for efficient parsing of multiple numbers with delimiter in C++
下面的函数只需取一个用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放入向量中。
为了更好地防范这些失范行为,我应该在这个代码中采取哪些措施?
是否有什么原因不能/不只是使用这样的东西?:
while (stream >> num)
v.push_back(num);
或者只是:
vector<unsigned long long int> getAllNumbersInString(string line) {
istringstream stream(line);
typedef unsigned long long int T;
vector<T> v((istream_iterator<T>(stream)), istream_iterator<T>());
return v;
}
如果您必须处理除空白之外的分隔符,则可以创建一个ctype方面来指定其他应被视为分隔符的内容。
您可以让iostreams库为您处理空白:
unsigned long long int num;
while(stream >> num)
v.push_back(num);
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- 正则表达式以匹配数字的重复模式,后跟任何类型的分隔符?
- 我可以从具有不同数字分隔符的istream中读取双值吗
- 从没有分隔符 C++ 的文件读取数字出现次数
- 使用boost::spirit::qi来解析带有分隔符的数字
- 递增由不同分隔符分隔的字符数组中的数字
- 用户定义字面值如何与数字分隔符一起使用
- 十六进制或二进制数中的数字前是否允许使用数字分隔符
- Julia中的数字分隔符
- 函数,用于在C++中高效解析带有分隔符的多个数字