C++ 将数字和逗号的字符数组转换为整数列表?
C++ convert char array of digits and commas to list of integers?
我有一个 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>>;
这是一个demo。
我有一个 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>>;
这是一个demo。