gpt4 book ai didi

c++ - 在 C++ 中使用定界符高效解析多个数字的函数

转载 作者:行者123 更新时间:2023-11-27 23:18:43 25 4
gpt4 key购买 nike

下面这个函数简单地接受一个用 64 位整数填充的字符串,每个值由一个分隔符分隔,将被放入 vector 中。

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,并将这些零放入 vector 中。

为了更好地防范这些异常,我应该在这段代码中采取哪些措施?

最佳答案

有什么原因你不能/不会只使用这样的东西吗?:

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 facet 来指定其他应被视为分隔符的内容。

关于c++ - 在 C++ 中使用定界符高效解析多个数字的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14800599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com