#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
/*
输入字符串,输出字符串中包含的数字,比如 2.3ABC0-2.3 输出 2.3 0 -2.3。
注意一些特殊的情况如+004.500值为+4.5。
*/
int main()
{
string str; //暂时存储整行
float a[20]; //存储所有的数字
getline(cin, str);
int flag = 0; //未找到数字
int count = 0; //记录数字数目
float sum = 0;
float num = 0;
int f = 0; //记录是否有过小数点
int s = 1; //记录小数点后缩小的倍数
int r = 0;
for(int i=0; i<str.length()+1; i++){
//还没有开始记录数字
char c = str[i];
//还没开始记录并且为符号并且后一位是数字
if(c == '-' && str[i+1] >= '0' && str[i+1] <= '9'){
r = 1;
}
//如果是数字
if(c >= '0' && c <= '9'){
num = c - '0';
if(!flag){ //数字的第一位;
sum = num;
flag = 1;
}
else if(flag && f==0){ //整数位
sum = sum*10 + num;
}
else if(flag && f==1){ //小数位
s*=10;
sum = sum + num/s;
}
}
//如果是小数点并且小数点后有数字
else if(c == '.' && str[i+1]>= '0' && str[i+1] <= '9')
f = 1;
else{
if(flag){
if(r==1)sum = -sum;
a[count++] = sum;
flag = 0;
sum = 0;
f = 0;
s = 1;
r = 0;
}
}
}
for(int i= 0; i<count; i++){
cout << a[i] << ' ';
}
return 0;
}
2016北理上机-字符串中识别数字
最新推荐文章于 2020-09-01 13:53:18 发布