说我有一个像
这样的字符串ab234cid *(S349 *(20KD
我希望提取所有数字234,349,20,并将其存储为单个整数值,在这种情况下 23434920 ?
答案 0 :(得分:1)
您可以使用以下算法:
['0', '9']
范围内,那么
奖金回答(我知道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;
希望这会有所帮助。