如何忽略正在阅读的行中某个位置的单词?

问题描述

我的代码首先打开文件并从中获取每一行,每一行采用以下形式:

HEX_NUM CHAR HEX_NUM

我的代码

stringstream s( line );
s >> std::hex >> addr >> letter >> std::hex >> target ; 

但是,我只想获取 CHAR 部分(无需创建变量 addrtarget)。我该如何重写代码的第二行?

解决方法

如果输入行严格遵循你的模式(行中只有两个空格,并且两个空格之间有单词),那么我们可以简单地使用std::string::findstd::string::rfind来精确中间部分.

#include <iostream>
#include <string>

int main() {
  std::string str;
  while (std::getline(std::cin,str)) {
    auto l = str.find(' ');
    auto r = str.rfind(' ');
    if (l < r) {
      std::cout << str.substr(l + 1,r - l) << std::endl;
    }
  }
}

但实际上我们要处理更复杂的格式,那么我们可以选择

  • 编写正则字符串以提取想要的部分
  • 手动编写解析器,有点费时
  • 使用简单的库 boost::spirit
  • 使用一些框架,如 ANTLR