C/C++字符串顺序提取整数字符并转化为整型
字符串的处理是研发岗常见的笔试和面试题目类型,在今年秋招的时候遇到这样一个笔试题:
输入一个包含整数字符的字符串(input),例如:“a1b2c3”、“0x2y1agad5"等,从str中提取出所有的整数,并且按照原字符的顺序转化为整数,例如:输入"a2s2d2”,提取整数输出为222。
在笔试的时候,我想到的可以通过一个简单的循环提取出所有到整数字符存入容器,然后通过atoi()或者strtol()方法进行字符串转化整型的操作。
具体实现如下:
#include<iostream>
#include<string>
#include<vector>
using namespace std;
void main()
{
string input;
cout << "请输入字符串:";
cin >> input;
vector<char> str;//vector容器用来存储整数字符
for (unsigned i = 0; i < input.size(); i++)
//利用字符的ASCII范围来筛选
if (input[i] >='0' && input[i] <= '9')
str.push_back(input[i]);
string temp(str.begin(), str.end());//生成纯整数的字符串temp
//利用atoi和strtol函数转换字符串
long int_atoi = atoi(temp.c_str());
long int_strtol = strtol(temp.c_str(), NULL,10);
cout << "atoi:" <<int_atoi << endl;
cout << "strtol:" <<int_strtol << endl;
}
输出如下:
菜鸟操作,大佬有更好的方法请指点!