如何在3 word 12 with word
中不使用312
的情况下,将stoi
之类的字符串转换为仅包含数字C++
的字符串?当我尝试使用它时,我的Codeblode给了我一个错误stoi is not a member of std
。
提前谢谢!
答案 0 :(得分:1)
浏览该行并跳过非数字符号。对于数字,使用-'0'
转换和*10
转换方法。 E.G:
#include <stdio.h>
#include <ctype.h>
//or cctype to use isdigit()
#include <string.h>
//or cstring to use strlen()
int main()
{
char str[] = "3 word 12 with word"; // can be any string
int result = 0; // to store resulting number
// begin of solution
for (int i = 0; i < strlen(str); i++)
{
if (isdigit(str[i]))
{
result *= 10;
result += str[i] - int('0');
}
}
// end of solution
printf("%d\n", result);
return 0;
}
答案 1 :(得分:1)
与VolAnd's answer中的想法相同。只是,因为问题被标记为c++
,使用了一些STL内容。
#include <iostream>
#include <numeric>
#include <string>
using namespace std;
int main(){
std::string input("3 word 12 with word");
int num = std::accumulate(input.begin(), input.end(), 0,
[](int val, const char elem) {
if (isdigit(elem)) {
val = val*10 + (elem-'0');
}
return val;
}
);
std::cout << num << std::endl;
return 0;
}
请参阅http://en.cppreference.com/w/cpp/algorithm/accumulate
注意:如果你想允许一个领先的减号,它会变得更有趣......
在这个问题上使用boost::adaptors::filter(rng, pred)会很有趣,但会稍微过分; - )
答案 2 :(得分:0)
假设s
是您的初始字符串。
int toInt(string s) {
string digits;
for(size_t i = 0; i < s.size(); i++)
if(s[i] >= '0' && s[i] <= '9')
digits.push_back(s[i]);
int res = 0;
for(size_t i = 0; i < digits.size(); i++)
res = res * 10 + digits[i] - '0';
return res;
}
前导零不是问题。
但请注意,如果生成的digits
字符串包含大数字,则可能会收到溢出。