C ++将数字和逗号的char数组转换为整数列表吗?

问题描述

我在C ++中有一个套接字设置,可以在缓冲区数组中接收字符流

char buffer[MAXSIZE];

buffer中的字符只能是数字01,...,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>>;

这里是https://laravel.com/docs/7.x/collections#method-get