例如:输入: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);