C ++ / C:将字符串转换为初始化列表

问题描述

我正在读一个字符串s = {1,2,3},看起来像是文本文件中的初始化列表。

如何使用int a[3]={1,3}之类的东西来进行类似int a[3]=s;的分配而不进行硬编码?

解决方法

正如评论中所说,在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;
}

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