字符串处理,找出数字 |
89aaaa67-09.09900 <变为>89 67 -9.099 |
#pragma once
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<sstream>
using namespace std;
class findNum
{
public:
findNum(){
}
findNum(string str) {
init(str);
istringstream ss(str);
string stemp;
while (ss >> stemp) {
del0(stemp);
m_strs.push_back(atof(stemp.c_str()));
}
}
~findNum(){
}
void init(string &str) {
size_t len = str.size();
for (size_t i = 0; i < len; i++) {
char ch = str[i];
if (!isNum(ch)) {
str[i] = ' ';
}
}
for (size_t i = 0; i < len;) {
char ch = str[i];
if (ch == '-') {
str.insert(i, " ");
len++; i += 2;
}else if (ch == '+') {
str.insert(i, " ");
len++; i += 2;
}
else i++;
}
}
bool isNum(char c) {
return (c <= '9' && c >= '0' || c == '.'||c=='-'||c=='+');
}
void del0(string& str) {
int i = 0;
char op = 'a';
if (str[0] == '-' || str[0] == '+') {
i = 1;
op = str[0];
}
while (str[i] == '0') i++;
int j = str.size() - 1;
if (hasPoint(str)) {
while (str[j] == '0') j--;
}
if(op!='a')
str = op+str.substr(i, j - i + 1);
else
str = str.substr(i, j - i + 1);
}
bool hasPoint(const string &str) {
return str.find('.') < str.size();
}
void show() {
for (double i : m_strs) {
cout << i << " ";
}
cout << endl;
}
private:
vector<double> m_strs;
};
void testForStoN() {
string s = "29pp044p345-0009.9090+900-400";
findNum test(s);
test.show();
}
- 从例子出发画历程图
- 学会简单的及时检验自己的想法,在main()函数中就具体的例子进行验证自己预想的结果。
- string c_str() 将string 转化为char*
- atof(str.c_str())
- insert(pos,字符串)
- find(char)==极大值,表示没找到