在C ++中从字符串中获取+/- int

时间:2019-03-19 15:38:59

标签: c++ regex string parsing stringstream

我已经为这头撞墙了一段时间了。我正在尝试做的是读取输入行并从中获取整数并将其存储以备后用。

示例输入:

subi r23,R10、435

Lb r3,-3(r10)

示例结果:

关于'subi'行,我需要3个变量rs1 = 23,rs2 = 10和imm = 435。 对于Lb,我需要rs1 = 3,rs2 = 10和imm = -3。

有许多不同类型的输入及其输入方式,因此我正在寻找最通用的方法。我以为正则表达式是答案,但是我个人什么都做不了,这也许就是我对正则表达式的无知。当我说我什么都无法工作时,我是说真的,我实在无法发布我在这里尝试过的内容,因为我敢肯定我只是在编造东西。目前,我正在使用这种想法:

<preference name="BackupWebStorage" value="none" />

这个想法的问题是,它只能让我从行中获得每个数字。它不适用于两位数或负数。我当时正在考虑嵌套一些if语句来检查数字旁边的内容。因此,一旦找到数字,我就可以向左看并检查它是否为“-”,然后向右看并检查它是否为数字。然后将这些if的解决方案推入向量。

虽然我认为我的想法可行,但我真的希望有更好的方法。

谢谢大家!

1 个答案:

答案 0 :(得分:0)

好的,所以使用boost :: tokenizer我想出了这个功能,它可以完美地工作。它会捕获所有正数或负数,并将它们存储到向量中供以后使用:

vector<string> getNumbers(string s){
    vector<string> result;
    typedef boost::tokenizer<boost::char_separator<char>> tokenizer;
    s=s.substr(s.find_first_of(" \t")+1);
    boost::char_separator<char> sep{" ,rR()"};
    tokenizer tok{s, sep};

    for (auto it = tok.begin(); it != tok.end(); ++it)
        result.push_back(*it);

return result;

}