Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 计算字符数组中的个数_C_Arrays_Comparison_Character - Fatal编程技术网

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')