编写一个程序,输入一个字符串,从字符串中提取有效的数字,输出它们的总和。

如输入“123.4ab56 33.2”,输出为212.6,即123.4+56+33.2的结果

img



#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
 
double function1(int b1, int b2, string s);   //计算整数
double function2(int b1, int b2, string s);   //计算小数
 
int main()
{
    int i, j, b1, b2;
    double sum = 0;
    string s;
 
    cout << "请输入一个字符串:";
    getline(cin, s);
    int len = s.length();   //获取输入的字符串的长度,定义一个数组来存放各个数字
 
    for (i = 0; i < len; ++i)
    {
        if ((s[i] >= 48)&(s[i] <= 57))   //无小数点
        {
            b1 = i;
 
            for (j = b1; j < len; ++j)
            {
                if ((s[j] >= 48)&(s[j] <= 57)) b2 = j;
                else break;
            }
 
            sum = sum + function1(b1, b2, s);
            
            i = b2;   //更新
        }
 
        if (s[i] == 46)  //有小数点
        {
            b1 = i + 1;
 
            for (j = b1; j < len; ++j)
            {
                if ((s[j] >= 48)&(s[j] <= 57)) b2 = j;
                else break;
            }
 
            sum = sum + function2(b1, b2, s);
            
            i = b2;   //更新
        }
    }
 
    cout << endl << "字符串中有效的数字的总和为:" << sum << endl <<endl;
 
    system("pause");
    return 0;
}
 
double function1(int b1, int b2, string s)   //计算整数
{
    double sum = 0;
 
    for (int i = b1; i <= b2; ++i) sum = sum * 10 + (s[i] - '0');
    
    return sum;
}
 
double function2(int b1, int b2, string s)   //计算小数
{
    double sum = 0;
 
    for (int i = b1; i <= b2; ++i) sum = sum / 10 + (s[i] - '0');
 
    return sum / 10;
}