C++ 从字符串中提取整数

C++ 从字符串中提取整数,c++,string,parsing,C++,String,Parsing,我正在从整数列表生成一个字符串键,以在映射中存储相应的值。 现在我想从键重新生成整数列表。 以下是生成密钥的函数: void generateKey( const std::vector<unsigned int>& varSet, string& key ) { // Generate a string by concatinating intergers as v_12_34_5 stringstream varNames; var

我正在从整数列表生成一个字符串键,以在映射中存储相应的值。 现在我想从键重新生成整数列表。 以下是生成密钥的函数:

void generateKey( const std::vector<unsigned int>& varSet, string& key )
    {
    // Generate a string by concatinating intergers as v_12_34_5
    stringstream varNames;
    varNames <<"v";

    for (unsigned int i = 0; i < varSet.size(); i++) 
        {
        varNames <<"_"<<varSet[i];
        }
    key = varNames.str();
    }
void generateKey(const std::vector和varSet、string和key)
{
//通过将整数浓缩为v_12_34_5生成字符串
字符串流变量名;

varNames在相反的情况下,您应该忽略第一个字符,然后在循环中提取剩余的

vector<unsigned int> generateKey(string key)
{
  stringstream varNames(key);
  varNames.ignore(); // Ignore the initial v

  vector<unsigned int> varSet;
  unsigned int value;

  // While we can ignore a character and extract an integer, add them
  // to varSet
  while (varNames.ignore() &&
         varNames >> value) {
    varSet.push_back(value);
  }

  return varSet;
}
向量生成器键(字符串键)
{
stringstream变量名(key);
varNames.ignore();//忽略初始v
向量变量集;
无符号整数值;
//虽然我们可以忽略一个字符并提取一个整数,但是添加它们
//瓦塞特
while(varNames.ignore()&&
varNames>>值){
变量集。推回(值);
}
返回变量集;
}

另一种解决方案是使用
std::getline
,将
视为行分隔符。

看起来像是受到了重击。不过:您可能需要检查输入格式是否正确;如果是这样,下面是一个示例程序:

#include <iostream>
#include <sstream>
#include <vector>
#include <cassert>

namespace {
  std::vector<unsigned int> parse(std::istream &is) {
     assert(is.get() == 'v');
     std::vector<unsigned int> res;
     while (is.good()) {
      unsigned int tmp;
      assert(is.get() == '_');
      is >> tmp;
      res.push_back(tmp);
    }
    assert(!is.fail());
    return res;
  }

  std::vector<unsigned int> parse(const std::string &s) {
    std::istringstream ss(s);
    return parse(ss);
  }
}

int main(int, char **) {
  for (unsigned int i : parse("v_1_23_4")) {
    std::cout << i << std::endl;
  }
  return 0;
}
#包括
#包括
#包括
#包括
名称空间{
std::vector parse(std::istream&is){
断言(is.get()=“v”);
std::向量res;
while(is.good()){
无符号整数tmp;
断言(is.get();
is>>tmp;
res.推回(tmp);
}
断言(!is.fail());
返回res;
}
std::vector解析(const std::string&s){
std::istringstream ss(s);
返回解析(ss);
}
}
int main(int,char**){
for(无符号整数i:parse(“v_1_23_4”)){

std::相关侧边栏中出现的几个问题(如和)是否涵盖了这一点。您是否尝试了一些东西,但遇到了问题?