cpp从字符串中获取数字

时间:2016-09-26 08:03:24

标签: c++ regex

使用正则表达式从给定字符串模式中获取数字的简单方法是什么?

字符串模式就像,

${type:1234} ${type:2345}

我想要数字,在这种情况下,1234,2345。

字符串模式也可以包含空格

${(WS)*type(WS)*:(WS)*1234(WS)*} , ... (more like this)

我还需要检查字符串是否为有效模式,如果是,则提取数字。

我知道使用tokenizer可以轻松完成,但我认为使用正则表达式会更好。

1 个答案:

答案 0 :(得分:1)

你使用一些魔法来实现你想要的循环:

#include <iostream>
#include <string>

int main()
{

    std::string str("${type:1234} ${type:2345}");

    int n = 0;

    for(int i(0); i < str.length(); i++)
    {
        if(isdigit(str[i]))
        {
            n++;
            while(isdigit(str[i]))
                i++;
        }
    }

    std::cout << "There are: " << n << std::endl;

    std::string* strTmp = new std::string[n];
    int j = 0;

    for(int i = 0; i < str.length(); i++)
    {
        if(isdigit(str[i]))
        {
            while(isdigit(str[i]))
            {
                strTmp[j] += str[i];
                i++;
            }
            j++;
        }
    }

    for(int i = 0; i < n; i++)
        std::cout << strTmp[i] << std::endl;

    // now you have strTmo holding numbers as strings you can convert them to integer:

    int *pInt = new int[n];

    for(int i = 0; i < n; i++)
        pInt[i] = atoi(strTmp[i].c_str());

    for(int i = 0; i < n; i++)
        std::cout << "value " << i+1 << ": " << pInt[i] << std::endl;

    delete[] strTmp;
    strTmp = NULL;
    delete[] pInt;
    pInt = NULL;


    std::cout << std::endl;
    return 0;
}