【问题标题】:Count number of occurrences of a digit within a string计算字符串中某个数字出现的次数
【发布时间】:2013-12-25 02:40:22
【问题描述】:

所以我正在尝试计算数组中每个数字的出现次数。

到目前为止,我的代码如下所示:

#include <stdio.h>
#include <string.h>

int main()
{
  int numbers [10]= {1, 4, 5, 5, 5, 6, 6, 3, 2, 1};
  int count = 0;

  for(int i = 0; i < 10; i++)
  {
    for (int j = 0; j < 10; j++)
    {
      if (numbers[i] == numbers[j])
      {
        count++;
      }
    }
    printf("Number %d has occured %d many times \n", numbers[i], count);
    count = 0;

  }
} 

只有我得到的输出如下:

Number: 1       Occurence: 2
Number: 4       Occurence: 1
Number: 5       Occurence: 3
Number: 5       Occurence: 3
Number: 5       Occurence: 3
Number: 6       Occurence: 2
Number: 6       Occurence: 2
Number: 3       Occurence: 1
Number: 2       Occurence: 1
Number: 1       Occurence: 2 

我只想统计每个数字出现的次数,好像是重复数。

如何更正此代码?有人能指出我正确的方向吗?

非常感谢

阿隆索

【问题讨论】:

  • 这是什么语言的? C? C++?还有什么?
  • 请在您的问题中标记适当的语言。我是期待 Java 来到这里的,但很失望。
  • 鉴于包含语法,我会猜到“C”
  • 在 C 中,“字符串是由第一个空字符终止并包括第一个空字符的连续字符序列”。 int numbers [10] 不是这样的字符串。

标签: c arrays string digits


【解决方案1】:

您将需要数组 - 一个用于计数(结果),一个用于输入。当您循环输入数字时,您应该增加计数数组中的索引。我无法抗拒实际编写代码,所以,给你,以下应该可以工作IN C++

#include <stdio.h>
#include <string.h>

int main()
{
  int inputNumbers [] = {1, 4, 5, 5, 5, 6, 6, 3, 2, 1};
  int resultCount [] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  int countNumbers = sizeof(inputNumbers) / sizeof(inputNumbers[0]);

  for(int i = 0; i < countNumbers; i++)
  {
     resultCount[inputNumbers[i]]++;
  }

  for(int i = 0; i < countNumbers; i++)
  {
    printf("Number %d has occured %d times \n", i, resultCount[i]);
  }
}

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    考虑这个修改后的代码:

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
      int numbers [10]= {1, 4, 5, 5, 5, 6, 6, 3, 2, 1};
      int count = 0;
    
      for(int i = 0; i < 10; i++) { //i = current digit
        for (int j = 0; j < 10; j++) { //j = index in array
          if (i == numbers[j]) {
            count++;
          }
        }
        printf("Number %d has occured %d times \n", i, count);
        count = 0;
      }
    }
    

    输出:

    Number 0 has occured 0 times 
    Number 1 has occured 2 times 
    Number 2 has occured 1 times 
    Number 3 has occured 1 times 
    Number 4 has occured 1 times 
    Number 5 has occured 3 times 
    Number 6 has occured 2 times 
    Number 7 has occured 0 times 
    Number 8 has occured 0 times 
    Number 9 has occured 0 times 
    

    您正在计算数组中出现的每个数字(包括数组中的重复数字)出现的频率。

    【讨论】:

    • 谢谢。我已经看到我哪里出错了。我知道这将是一个简单的错误。干杯
    • 没问题!请考虑将答案标记为“正确”,以便其他人在遇到类似问题时可以找到正确的解决方案!备注:如果要忽略零计数数字,请将 printf() 括在 if(count == 0) {}
    • 考虑int count = 0;介于2个for(...)之间。
    • @chux :我同意这将是一个更好的解决方案,但我的意图是尽可能少地修改原始代码。
    猜你喜欢
    • 2017-10-09
    • 2010-11-12
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    相关资源
    最近更新 更多