问题描述
我在C ++中有一个套接字设置,可以在缓冲区数组中接收字符流
char buffer[MAXSIZE];
buffer
中的字符只能是数字0
,1
,...,9
或逗号,
。我想转换一个示例缓冲区内容,例如
buffer = {'1','2',','3','5','6',...};
最终的字符位置存储在变量len
中,并存储在整数列表中
integers = {12,3,56};
我可以通过反复遍历字符列表,取每个数字,将其乘以10并加上下一个数字,直到遇到逗号,
来凑合一种愚蠢的方式。但是我想这种方法对于大数据速率来说太慢了。
在C ++中进行此转换的正确方法是什么?
解决方法
假设可以使用std::vector
,则可以尝试以下操作:
std::vector<int> integers;
int currentNumber = 0;
for(char c = ' ',int i = 0; i < MAX_SIZE; i++) {
c = buffer[i];
if(c == ',') {
integers.push_back(currentNumber);
currentNumber = 0;
} else {
currentNumber *= 10;
currentNumber += c - '0';
}
}
integers.push_back(currentNumber);
,
如果可以使用range-v3库,则可以执行以下操作:
namespace rs = ranges;
namespace rv = ranges::views;
auto integers = buffer
| rv::split(',')
| rv::transform([](auto&& r) {
return std::stoi(r | rs::to<std::string>);
})
| rs::to<std::vector<int>>;