我发现这个代码,但这个总和所有的数字,但我希望它的广告31而不是3+1输出:28预期值:100
#include<stdio.h>
int main()
{
//Initializing variables.
char str[100] = "10+5+6+31+3+45";
int i,sum = 0;
//Iterating each character through for loop.
for (i= 0; str[i] != '\0'; i++)
{
if ((str[i] >= '0') && (str[i] <= '9')) //Checking for numeric characters.
{
sum += (str[i] - '0'); //Adding numeric characters.
}
}
//Printing result.
printf("Sum of all digits:\n%d", sum);
return 0;
}
3条答案
按热度按时间3pvhb19x1#
由于分隔符显然是加号,因此可以使用“strkok”字符串函数,如以下链接strkok example所示。
在初始代码中使用该方法会产生以下代码片段。
测试此代码会导致以下终端输出。
你可以试试这个方法,看看它是否符合你项目的精神。
iyzzxitl2#
我们可以在字符串中向后迭代,把所有的数字相加,除了我们在另一个数字后面看到的一个数字值高10倍,因为它在数字中处于更重要的位置。
这是一个非常专业的解析器,专门用来处理你的特定类型的问题。一旦你添加了复杂的东西(比如减号),这个解析器就可能需要重写。
cgyqldqp3#
试试这个:
第一个
在这个程序中,我们只依靠字符的算术运算。我们开始字符串
00000000
(八个零:很容易扩展),并将其视为一个计数器,我们将其递增输入字符串中连续元素的值,如1+2+3
。我们向后扫描输入字符串,例如,假设字符串以
+23
结尾,我们首先访问3:我们将字符串的最后一个数字增加该数字的数值,即
'3' - '0'
。接下来,我们遇到23
的2
,记住我们是反向操作:我们将数字
2
的值添加到字符串中的第二个数字:接下来,我们在
+23
中看到+
字符,这意味着我们将重置数字位置;下一次看到一个数字时,我们将它添加到个位数列。假设输入以+9+23
结束。我们将处理的下一个数字是9
:当我们将数字
3
增加9时,我们得到<
ASCII字符:这个字符超出了
9
,所以我们有溢出。为了处理这个问题,我们减去10,并将1进位到下一列。所以我们的累加器变成: