-6

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

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

1 回答 1

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重用而不是作用域。变量名称可能更具描述性。
  • 暂无评论...

享受和其他人欢迎烧烤我,因为它给出了这样的家庭作业级别的答案。只是想看看我能多快把它放在一起。

于 2013-04-24T18:17:59.870 回答