思路:遍历字符串,找到第一个数字或小数点(设定无整数部分的浮点数可以缺省整数部分的0),记录位置,如果是小数点,则记录标志(一个浮点数最多只有一个小数点);直到找到第一个非数字或者出现重复小数点时为止,中间部分就是一个数值,通过atof进行转换。然后继续上述遍历处理,直至字符串处理结束
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 1000
void main()
{
char ch[MAX_SIZE] = {0};
printf("请输入任意字符串:");
scanf("%[^\n]",ch);
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;
*p = 0;
printf("%s\n",q);
sum += atof(q);
*p = c;
p--;
//恢复状态
q = NULL;
bP = false;
}
}
p++;
}
//判断结尾是否是个数,是则加上
if(q != 0)
{
printf("%s\n",q);
sum += atof(q);
}
printf("总和为:%lf\n",sum);
}