我需要从char*
总结一些不同的数字。
char类似于"12,38,40"
,结果为90,但也可以是"12/5?10,-20"
,其结果应为7。
我已经拥有的代码是:
extern int Add()
{
char *string = "ab230c,i d*(s370*(20k-100d";
char *totaal = string;
int Sum = 0;
while (*totaal)
{
if (isdigit(*totaal))
{
int getal = strtol(totaal, &totaal, 10);
printf("%ld\n", getal);
if(getal >= 0)
{
Sum += getal;
}
}
else
{
totaal++;
}
}
printf("the sum of all numbers is: %d\n", Sum);
return Sum;
}
除了负数之外,它完全处理所有内容,它只是忽略-
并添加10。
有人知道如何解决这个问题吗?我无法理解它。
答案 0 :(得分:6)
将您的if条件更改为:
if (isdigit(*totaal) || (*totaal=='-'))
strtol
能够处理负数
例如strtol("-15",NULL,10)
会产生-15
。
答案 1 :(得分:1)
只需添加另一个测试用例。您可以测试*totaal == '-'
。如果此条件为真,请设置一个标志变量,指示当前数字为负数。然后,您可以在设置总值时应用此标志。