首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何知道数组中偶数索引值和奇数索引值之和之间的差异(递归代码)

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

Stack Overflow用户
提问于 2021-12-10 18:43:26
回答 2查看 120关注 0票数 -2

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

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

代码语言:javascript
复制
printf("Enter a string:");
if(scanf("%s",str)!=1)
{
    printf("Input error");
    return 1;
}

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

在主要功能之外:

代码语言:javascript
复制
int diff (char str[], int i)
{
    if(str[i]=='\0' || i>=100)
        return 0;
    if(i%2==0)
        return (str[i]+diff(str,i+1));
    else
        return (-str[i] +diff(str,i+1));
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-10 18:48:11

编写的代码无法工作,因为它没有将str中保存的字符代码转换为0-9范围内的整数值。

如果对diff函数的输入为"12345“,则检查str、str1、.使用调试器或将它们打印出来的str5将显示它们是(假设ASCII派生的编码):

代码语言:javascript
复制
49 50 51 52 53

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

在源字符集和执行基本字符集中,上述十进制数字列表中0之后的每个字符的值应大于前一个字符的值。

实际上,这意味着您可以通过减去'0','1',…,'9‘,将字符'0’转换成它们的等效值。

代码语言:javascript
复制
int value = str[i] - '0';

将此添加到代码中将提供diff的工作版本。

代码语言:javascript
复制
int diff (char str[], int i)
{  
    if(str[i]=='\0' || 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));
}
票数 -1
EN

Stack Overflow用户

发布于 2021-12-10 19:16:20

另一种办法可以是:

代码语言:javascript
复制
int diff (const char str[])
{
    if (str[0] == '\0')
        return 0;
    if (str[1] == '\0')
        return str[0] - '0';

    return str[0] - str[1] + diff(str + 2);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70309084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档