【问题标题】:Count number of ones in a array of characters计算字符数组中的个数
【发布时间】:2015-08-25 03:27:57
【问题描述】:

我正在尝试使用递归类型程序计算代表二进制数的字符数组中的个数。但是,似乎我的程序只是在计算数组中的字符数。我不知道我是否只是在比较错误,但我似乎找不到问题

#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;
 }
}

【问题讨论】:

  • 另外:将递归用作迭代器是对递归的不良使用。考虑改为将数组在每次迭代(递归)中分成两半,并将两半的结果相加。这不会降低运行时的复杂性顺序,但您的最大递归深度将是 log2(n) 而不是 n
  • @chux 虽然我同意你的 cmets,但这可能是教师需要使用递归的课堂作业。
  • @Code-Apprentice 我的建议仍然使用递归。为了清楚起见,重新措辞。
  • track = track+1 可以简化为 track+1。在大型表达式中嵌入赋值被认为是一种不好的做法,因为它可能导致不同编译器之间的不同行为。在这种情况下,它可能不会造成任何问题,但我建议您以后避免这样做。
  • @chux 对……我第一次确实读到了你的评论。我还应该说明另一个猜测,即参数的数量可能由讲师指定。如果我理解正确,您的替代解决方案至少需要一个参数来给出要处理的数组部分的开头和结尾。

标签: c arrays comparison character


【解决方案1】:

在方法determine():

if ( array[track] == '1');

删除分号;。分号使if 条件执行empty 块。因此count++ 将始终执行无论if 条件是否成功(true)或不(false)。

我使用; 运行您的代码并获得输出:

1的个数是7

没有;

1的个数是3个

【讨论】:

    【解决方案2】:
    if ( array[track] == '1');
    

    应该是

    if ( array[track] == '1')
    

    删除;

    如果您有;,那么无论条件评估结果如何(TRUE 或 FALSE)count++ 都会被执行

    【讨论】:

      【解决方案3】:

      你试过简单的countif函数吗?

      =sum if (range="1")

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-20
        • 1970-01-01
        • 1970-01-01
        • 2016-05-06
        • 1970-01-01
        • 2011-08-28
        • 1970-01-01
        相关资源
        最近更新 更多