输入一个包含数字的字符串,将其中的所有孤立数之和输出。

例如:输入:a10.51b2 1c4def3.2 输出:20.71(因为10.51+2+1+4+3.2=20.71)
【思路指导】当出现小数点后,其后的数值的拼法为:num[numcount] = num[numcount] + (s[i]-'0')*pow(10,-(ws+1)); 同时,ws(小数位数)要增1

代码如下,如有帮助,请帮忙采纳一下,谢谢。


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char tmp[10]={0};   //用于临时存储字符串
    char buf[100]={0};  //接收字符串
    int i = 0,j = 0,t;
    double sum = 0;
    printf("请输入一个字符串:");
    gets(buf);
    
    while(buf[i] != '\0')
    {
        if(buf[i]>='0' && buf[i]<='9')
            tmp[j++] = buf[i];
        else if(i>0 && buf[i] == '.' && (buf[i-1]>='0' && buf[i-1]<='9') )
            tmp[j++] = buf[i];
        else
        {
            if(j > 0)
            {
                sum += atof(tmp);
                //printf("tmp =%s\n",tmp);
                j=0;
                for(t=0;t<10;t++)
                    tmp[t] = 0;
            }
        }
        i++;
    }

    if(j > 0)
    {
        sum += atof(tmp);
        //printf("tmp =%s\n",tmp);
        j=0;
        for(t=0;t<10;t++)
            tmp[t] = 0;
    }

    printf("和=%g\n",sum);

    return 0;

}

1.定义字符数组;
2.用ascii判断字符的范围ascii(48~57);
3.转换为float类型,相加。

逐个字符扫描字符串,记录第一个数字的位置,直到第一个不是数字或第二个小数点位置。用atof转换两个位置之间的子串即可获得浮点数

大致代码如下:
char ch[] = ":a10.51b2 1c4def3.2";
char *p = ch;
char *q = NULL;
bool bP = false;
double sum = 0;
while(*p != 0)
{
  if(*p >= '0' && *p <= '9')
  {
    if(q == NULL)
    {
      q = p;
    }
  }
  else if(*p == '.'&& !bP)
  {
     bP = true;
     if(q == NULL)
        q = p;
  }
  else
  {
    if(q != NULL) //找到一个数
    {
      char c = *(p+1);
      *(p+1) = 0;
      sum += atof(q);
      *(p+1) = c;
      //恢复状态
      q = NULL;
      bP = false;
    }
  }
  p++;
}
//判断结尾是否是个数,是则加上
if(q != 0)
  sum += atof(q);
printf("总和为:%lf",sum);