谭浩强第八章第十六题
思路:本篇使用了多个指针,思路不够整洁,可以只需一个指针完成。
但与简洁思路相同,从字符数组数字的个位开始处理,若需要从高位开始处理,则好像可以少定义一个变量?以后再写。
int main()
{
char s[20];
scanf("%s", s);
int a[20] = {0};
char* p = s; //
int num = 0; //计数连续数字
int n = strlen(s);
int i = 0; //整型数组的下标
for (; p < s + n; p++)
{
if (*p <= '9' && *p >= '0')
{
i++;
num++;
char* q = p;
while (*++q <= '9' && *q >= '0') num++; //移动另一个指针并计算数字个数
char* next = --q; //第三个指针记录数字尾
int sum = *q - '0'; //记录数字的个位
int m = 0; //记录每个位要乘10的次数
while (q >= p)
{
q--; //另一个指针后移
a[i - 1] += sum; //整型数组接收每一位数字和
num--; //接收一位数字后计数器减一
m++; //下一位乘10次数加一
if (num != 0) //计数器不为0则下一位自乘
{
int ret = 0;
sum = *q - '0'; //记录下一位
for (; ret < m; ret++) //下一位自乘多少次,由m决定
{
sum *= 10;
}
}
}
p = next; //指向这一组数字尾
}
}
for (num = 0; num < i; num++)
printf("%d ", a[num]);
}
结果: