字符串类型中取数字(转整形)(C++)
问题:
有时题目中会有输入一段字符串(含数字),提取里面的数字出来进一步处理。
可能很多小伙伴想到就是遍历一遍,把是数字的挑出来转为整形,但可能有小伙伴会发现只能一个一个数存,然后
再合起来。在这里,小编就介绍一种比较好用的算法,掌握了绝对用得上,而且三行代码就可以搞定的。
废话不多说,代码如下:
//当确定s[i]是一个数字字符时,可以用如下C++代码获取字符串中的整数
int sum=0;
while(isdigit(s[i]))//判断是不是数字
sum=sum*10+s[i++]-'0';//转整形
代码(简单版本)运用于较为简单的字符串
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
string s;
cin>>s;
//当确定s[i]是一个数字字符时,可以用如下C++代码获取字符串中的整数
int sum=0,i=0;
while(isdigit(s[i]))//判断是不是数字
sum=sum*10+s[i++]-'0';//转整形
cout<<sum;
return 0;
}
运行如下:
通过以上结果,我们不难发现这三行代码直接用还是有局限性的。所以。。。。。。
进一步改进:
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
string s;
cin>>s;
//当确定s[i]是一个数字字符时,可以用如下C++代码获取字符串中的整数
int sum,i=0,k=0;
while(i<s.length())//把是字符串s每个元素遍历一遍
{
sum=0;//每次循环要变回0
while(isdigit(s[i]))//对数字
{
k=1;
sum=sum*10+s[i++]-'0';//转整形
}
if(k==1)cout<<sum<<endl;//判断是否输出
k=0;//每次循环要变回0
while(!isdigit(s[i]))i++;//对不是数字的:字母,符号。。。
}
return 0;
}
运行:
再复杂的字符串都可以解决了。当然要自行根据题目意思进行改变,比如存入数组中。。。。。。