C 计算字符数组中的个数
我试图用递归类型的程序来计算表示二进制数的字符数组中的个数。然而,我的程序似乎只是在计算数组中的字符数。我不知道我是否只是在比较错误,但我似乎找不到问题所在C 计算字符数组中的个数,c,arrays,comparison,character,C,Arrays,Comparison,Character,我试图用递归类型的程序来计算表示二进制数的字符数组中的个数。然而,我的程序似乎只是在计算数组中的字符数。我不知道我是否只是在比较错误,但我似乎找不到问题所在 #include <stdio.h> # include <stdlib.h> #include <string.h> #define SIZE 20 int determine (char array[SIZE], int count, int track ); int main() { int
#include <stdio.h>
# include <stdlib.h>
#include <string.h>
#define SIZE 20
int determine (char array[SIZE], int count, int track );
int main()
{
int answer = 0;
char input[SIZE]={"1001001"};
int count = 0;
int track = 0;
answer = determine(input, count, track);
printf("The number of 1's is %d ", answer);
system("PAUSE");
return 0;
}
int determine(char array[], int count, int track)
{
if (array[track] != '\0')
{
if ( array[track] == '1');
{
count++;
}
return determine(array, count, track = track+1);
}
else
{
return count;
}
}
#包括
#包括
#包括
#定义尺寸20
int determine(字符数组[大小]、int计数、int轨迹);
int main()
{
int-answer=0;
字符输入[SIZE]={“1001001”};
整数计数=0;
int轨道=0;
回答=确定(输入、计数、跟踪);
printf(“1的数量为%d”,答案);
系统(“暂停”);
返回0;
}
整数确定(字符数组[],整数计数,整数轨迹)
{
if(数组[曲目]!='\0')
{
if(数组[track]=“1”);
{
计数++;
}
返回确定(数组、计数、轨迹=轨迹+1);
}
其他的
{
返回计数;
}
}
在方法确定()
中:
删除分号代码>。分号使if
条件执行空的块。因此无论条件是否成功(true
),无论计数+
是否成功(false
),都将始终执行
我用运行您的代码
并获取输出:
1的数目是7
没有代码>:
1的数目是3
应该是
if ( array[track] == '1')
删除代码>
如果您有
那么不管条件评估结果(TRUE或FALSE)count++
将被执行您是否尝试过简单的countif函数
=sum if(range=“1”)另外:使用递归作为迭代器是对递归的拙劣使用。请考虑将数组按迭代的一半除以(递归),并将2个半部的结果相加。这不会降低运行时的复杂性顺序,但您的最大递归深度将是log2(n)
而不是n
@chux虽然我同意您的意见,但这可能是一个课堂作业,讲师要求使用递归。@code学徒我的建议仍然使用递归。为清晰起见,重新措辞。track=track+1
可以简化为track+1
。在大表达式中嵌入赋值被认为是一种错误的做法,因为它可以在不同编译器之间造成不同的行为。在这种情况下,它可能不会引起任何问题,但我建议您以后避免这样做。@chux Right…我第一次读到您这样的评论。我还应该说明另一个猜测,即参数的数量可能由讲师决定。如果我理解正确,您的替代解决方案将至少需要一个以上的参数来给出要处理的数组部分的开始和结束。
if ( array[track] == '1');
if ( array[track] == '1')