如何在c ++中的混合字符串整数行中提取特定整数

时间:2014-02-05 22:32:15

标签: c++ string

我正在用c ++读取一个文本文件,这是其中一些行的示例:

remove 1 2 cost 13.4

除了删除后的两个整数,除了“1”和“2”之外我怎么能忽略所有的东西并把它们放在两个整数变量中?

我的不完整代码:

ifstream file("input.txt");
string line;
int a, b;

if(file.is_open())
{
   while (!file.eof())
   {
      getline (file, line);
      istringstream iss(line);
      if (line.find("remove") != string::npos)
      {     

          iss >> a >> b;      // this obviously does not work, not sure how to
                              // write the code here
      }
   }

}

1 个答案:

答案 0 :(得分:1)

以下是一些选项:

  1. 使用为该行创建的stringstream查找remove令牌并解析接下来的两个整数。换句话说,替换它:

    if (line.find("remove") != string::npos)
    {     
    
        iss >> a >> b;      // this obviously does not work, not sure how to
                            // write the code here
    }
    

    用这个:

    string token;
    iss >> token;
    
    if (token == "remove")
    {
        iss >> a >> b;
    }
    
  2. 为该行的其余部分创建stringstream6是“删除”令牌的长度。

    string::size_type pos = line.find("remove");
    
    if (pos != string::npos)
    {     
        istringstream iss(line.substr(pos + 6));
    
        iss >> a >> b;
    }
    
  3. 调用行seekg上的stringstream方法,在“删除”令牌后设置流的输入位置指示符。

    string::size_type pos = line.find("remove");
    
    if (pos != string::npos)
    {     
        iss.seekg(pos + 6);
    
        iss >> a >> b;
    }