从c ++中的字符串中取+/- ints

问题描述 投票:-1回答:1

我一直在为这一个打我的头。我要做的是读取一行输入并从中获取内容并存储以供以后使用。

示例输入:

经历了r23,R10,435

Lb r3,-3(r10)

示例结果:

关于'subi'线,我需要3个变量rs1 = 23,rs2 = 10,imm = 435.对于Lb,我需要rs1 = 3,rs2 = 10,并且imm = -3。

有许多不同类型的输入和它们的编写方式,所以我正在寻找最通用的方法。我认为正则表达式是答案,但我个人无法得到任何工作,这也许是我对正则表达式的无知。当我说我无法得到任何工作时,我的意思是,我老实说无法发布我在这里尝试的内容,因为我很确定我只是制作东西。目前我正在使用这个想法:

for(int i = 0; line[i] != '\0'; 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的解决方案并将其推送到矢量。

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

感谢大家!

c++ regex string parsing stringstream
1个回答
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;

}

© www.soinside.com 2019 - 2024. All rights reserved.