(仅递归解)我使用的函数是: int (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;在主要功能之外:
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));
}发布于 2021-12-10 18:48:11
编写的代码无法工作,因为它没有将str中保存的字符代码转换为0-9范围内的整数值。
如果对diff函数的输入为"12345“,则检查str、str1、.使用调试器或将它们打印出来的str5将显示它们是(假设ASCII派生的编码):
49 50 51 52 53幸运的是,(感谢user @SomeProgrammerDude指出这一点),C标准要求(例如:ISO/IEC 9899:TC3§5.2.1,第3段):
在源字符集和执行基本字符集中,上述十进制数字列表中0之后的每个字符的值应大于前一个字符的值。
实际上,这意味着您可以通过减去'0','1',…,'9‘,将字符'0’转换成它们的等效值。
int value = str[i] - '0';将此添加到代码中将提供diff的工作版本。
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));
}发布于 2021-12-10 19:16:20
另一种办法可以是:
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);
}https://stackoverflow.com/questions/70309084
复制相似问题