问题描述:
字符串中包含数字和其他非数字的字符如字母,分隔符等。现在需要提取字符串的中的数字到数字中。
代码:
#include<iostream>
#include<iomanip>
#include<vector>
#include<string>
using namespace std;
void extractFiguresFromStr2Vec(string str, vector<double> &vec);
void extractFiguresFromStr2Vec(string str, vector<int> &vec);
void main()
{
string str("- 1.3 fd 2.5 4j 7.8 qq");
string str1("saf21? fw64,123[]w09\t322\n23 w?fwaet.,<>wet3254 4");
vector<double> vec;
vector<int> vec1;
extractFiguresFromStr2Vec(str, vec);
extractFiguresFromStr2Vec(str1, vec1);
for (int i = 0; i < vec.size(); i++){
cout << vec[i] << "\t";
}
cout << endl;
for (int i = 0; i < vec1.size(); i++){
cout << vec1[i] << "\t";
}
cout << endl;
}
void extractFiguresFromStr2Vec(string str, vector<double> &vec){
const char *s = str.c_str();
const char *pstr;
int i = 0, j = 0;
int k, m;
int e10;
int digit;
int ndigit = 0;
pstr = &s[0];
for (i = 0; *(pstr + i) != '\0'; i++){
if ((*(pstr + i) >= '0') && (*(pstr + i) <= '9') || *(pstr + i)=='.')
j++;
else{
if (j > 0){
string str;
for (k = j; k > 1; k--){
str.append(pstr + i - k);
}
vec.push_back(atof(str.c_str()));
ndigit++;
j = 0;
}
}
}
if (j > 0){
string str;
for (k = j; k > 1; k--){
str.append(pstr + i - k);
}
vec.push_back(atof(str.c_str()));
ndigit++;
j = 0;
}
}
void extractFiguresFromStr2Vec(string str, vector<int> &vec){
const char *s = str.c_str();
const char *pstr;
int i = 0, j = 0;
int k, m;
int e10;
int digit;
int ndigit = 0;
pstr = &s[0];
for (i = 0; *(pstr + i) != '\0'; i++){
if ((*(pstr + i) >= '0') && (*(pstr + i) <= '9'))
j++;
else{
if (j > 0){
digit = *(pstr + i - 1) - 48;
for (k = 1; k < j; k++){
e10 = 1;
for (m = 1; m <= k; m++)
e10 = e10 * 10;
digit = digit + (*(pstr + i - 1 - k) - 48)*e10;
}
vec.push_back(digit);
ndigit++;
j = 0;
}
}
}
if (j > 0){
digit = *(pstr + i - 1) - 48;
for (k = 1; k < j; k++){
e10 = 1;
for (m = 1; m <= k; m++)
e10 = e10 * 10;
digit = digit + (*(pstr + i - 1 - k) - 48)*e10;
}
vec.push_back(digit);
ndigit++;
j = 0;
}
}
实验截图:
欢迎登陆我的个人主页,hello2019,查看原文:http://richardliu.cn/