如何从字符串中提取数字并存储为单个整数?

时间:2017-08-04 10:46:43

标签: c

说我有一个像

这样的字符串
  

ab234cid *(S349 *(20KD

我希望提取所有数字234,349,20,并将其存储为单个整数值,在这种情况下 23434920

4 个答案:

答案 0 :(得分:1)

您可以使用以下算法:

  • 将结果初始化为0
  • 迭代字符串的字符
    • 如果字符在['0', '9']范围内,那么
      • 将前一个结果乘以10(这是一个小数位左移)
      • 将字符转换为数字
      • 的数字值
      • 将数值添加到结果

奖金回答(我知道OP删除了[c ++]标签):虽然算法可以直接从自然语言翻译,但可以用C ++简化。

accumulate(begin(str), end(str), 0, [](int r, char c){
    return isdigit(c)
        ? r*10 + (c - '0')
        : r;
});

答案 1 :(得分:1)

unsigned int IntegerFromString(unsigned char* str)
{
    unsigned int num = 0;

    for(unsigned int i = 0 ; i<strlen(str) ; i++){

        if(isdigit(str[i])){

            num *= 10;
            num += (str[i] - 48);
        } 
    }

    return num;
}

答案 2 :(得分:0)

您可以通过迭代字符串扫描数字来实现这一点,然后使用转换API之一:

string str = "ab234cid*(s349*(20kd";

string strNum;

for(int i = 0; i < str.length(); i++){
    while(isdigit(str[i])){
        strNum += str[i];
        int value = atoi(strNum.c_str());
        cout << "Value: " << value << endl;
        i++;
    }
    strNum = "";
}
  • 我建议使用regex

答案 3 :(得分:-1)

你可以使用std :: stringstream。 对于你的第一个问题你可以像这样:(让text为包含“CAPACITY:100”的字符串) 1 2 3 4 5

rm -rf ~/Library/Caches/org.carthage.CarthageKit

tmp将为CAPACITY,c将为:且值为100。 但这只能起作用,因为容量和:由空间分隔。如果他们不是,你不需要&gt;&gt; c部分。

第二个问题:(让text为包含“1 82 76”的字符串) 1 2 3 4 5

std::string tmp;
int value;
char c;
std::stringstream ss(text);
ss >> tmp >> c >> value;

希望这会有所帮助。