C++/C:将字符串转换为初始值设定项列表



我正在读取字符串s = {1,2,3},它看起来像是文本文件中的初始值设定项列表。

如何在不使用int a[3]=s;之类的东西进行硬编码的情况下完成像int a[3]={1,2,3}这样的作业?

正如评论中所说,在C++中实现这一点的唯一方法是手动编写解析器。使用std::vector的一个例子(由于长度的可变性,您应该特别使用(可能如下:

#include <algorithm>
#include <vector>
#include <string>
#include <sstream>
std::vector<int> parse(const std::string& str){
if(str.front() != '{' || str.back() != '}'){
throw std::invalid_argument("vectors must be enclosed between braces");
}
std::vector<int> result;
result.reserve(std::count(str.begin(), str.end(),',')+1); // this pays off for really big vectors
std::stringstream stream(str.substr(1,str.size()-2));
std::string element;
while(getline(stream,element,',')){
result.push_back(std::stoi(element));
}
return result;
}

如果性能不是那么重要,那么就应该这样做

最新更新