找到数组中最常用的字符?

时间:2013-04-24 18:06:26

标签: c arrays character

这是我的代码,用于查找数组中最常用的字符。请调试它并识别错误。它大部分时间都在工作,但在某些情况下输出不正确。请帮帮我这个

#include <stdio.h>
#define size 100
int main()
{
char a[size]={0};
int i,j, k, n;
char c, e;

printf("enter size of array\n");
scanf("%d", &n);
a[n]=0;

printf("enter the characters??\n");

for(i=0; i<n; i++)
  {
    scanf(" %c", & a[i]);
  }


for(j=0; j<n; j++)
{
for(k=0; k<n; k++)
   {
     if(j==k)
       {
        continue;
       }

      else if(a[j]=a[i])
           {
              e=a[j];
           }
      else if(a[j]!=a[k])
           {
            continue;
           }
   }
}
printf("the most frequently occuring character is %c", e);
return 0;
}

1 个答案:

答案 0 :(得分:2)

为了好玩,使用自己承担家庭作业的风险:


int count[256];
const char input[] = "hjkshrjkhsfh2389r2jhfjkjfljsdjklf";

int main()
{
    int i;
    for(i=0; input[i]; i++)
    {
        count[input[i]]++; 
    }

    int best = 0;
    char letter = 0;

    for(i=0; i<256; i++)
    {
        if(count[i] > best)
        {
             best = count[i];
             letter = (char)i;
        } 
    }

    printf("letter: %c, best: %d\n", letter, best); 

    return 0;
}

为了让它成为一个教训,这里的事情在这里做得很糟糕,现实世界会让你陷入困境:

  • 幻数256表示所有字节大小
  • 我的strlen检查输入是非常不安全的。
  • 不处理“巨大”列表 - 仅允许2 ^ 31次出现。
  • O(strlen)+ O(256)= O(n)时间 - 可能会有所改善。
  • i重用而不是作用域。 Var名称可能更具描述性。
  • 没有评论......

欢迎和其他人欢迎烧烤我给出这样的家庭作业水平答案。只是想看看我能把它组合起来有多快。