从 C++ 中的字符串中获取 +/- 整数

Take +/- ints from string in c++

我已经为这个问题苦苦思索了一段时间。我想要做的是读取一行输入并从中获取整数并将其存储以备后用。

示例输入:

subi r23, R10, 435

Lb r3, -3(r10)

示例结果:

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

有许多不同类型的输入及其编写方式,因此我正在寻找最通用的方法。我认为正则表达式是答案,但我个人无法得到任何工作,这也许是我对正则表达式的无知。当我说我什么都做不了时,我是认真的,老实说,我不能 post 我在这里尝试的东西,因为我很确定我只是在编造东西。目前我正在使用这个想法:

for(int i = 0; line[i] != '[=10=]'; i++){
    if(isdigit(line[i]) != 0){
       temp += line[i];
       }
}
rs1tmp = temp[1];
rs1 = stoi(rs1tmp);
rs2tmp = temp[2];
rs2 = stoi(rs2tmp);
rdtmp = temp[0];
rd = stoi(rdtmp);

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

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

谢谢大家!

好的,所以使用 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;

}