如何知道数组中偶数索引值之和与奇数索引值之和之间的差异(递归代码)

how to know the difference between the sum of the values of the even index and the sum of the values of the odd index in an array (recursive code)

(仅限递归解决方案)我正在使用函数:int diff(char str[],int i) 输入是字符串:123,偶数索引中值的总和是 1+3=4 奇数索引中的值之和为 2 因此数组 中偶数索引的值之和与奇数索引的值之和之间的差是 :4-2= 2.

我主要写了这个但是不对,我该如何修改我的代码??? :

printf("Enter a string:");
if(scanf("%s",str)!=1)
{
    printf("Input error");
    return 1;
}

printf("The difference is: %d", diff(str, 0));
return 0;

在 main 之外是函数 :

int diff (char str[], int i)
{
    if(str[i]=='[=11=]' || i>=100)
        return 0;
    if(i%2==0)
        return (str[i]+diff(str,i+1));
    else
        return (-str[i] +diff(str,i+1));
}

所写的代码不起作用,因为它没有将 str 中保存的字符代码转换为 0-9 范围内的整数值。

如果 diff 函数的输入是“12345”,那么使用调试器或打印出来检查 str[0]、str[1]、...str[5] 的值将显示它们是(假设 ASCII 派生编码):

49 50 51 52 53

幸运的是,(感谢用户@SomeProgrammerDude 指出了这一点),C 标准要求(参见,例如:ISO/IEC 9899:TC3 §5.2.1,第 3 段):

In both the source and execution basic character sets, the value of each character after 0 in the above list of decimal digits shall be one greater than the value of the previous.

这实际上意味着您可以通过减去“0”将字符“0”、“1”、...、“9”转换为它们的等效值。

int value = str[i] - '0';

将此添加到代码中可得到 diff:

的工作版本
int diff (char str[], int i)
{  
    if(str[i]=='[=12=]' || i>=100)
        return 0;
    int value = str[i] - '0';
    if(i%2 == 0)
        return (value + diff(str, i+1));
    else
        return (-value + diff(str, i+1));
}

另一种方法可能是:

int diff (const char str[])
{
    if (str[0] == '[=10=]')
        return 0;
    if (str[1] == '[=10=]')
        return str[0] - '0';

    return str[0] - str[1] + diff(str + 2);
}