C 预期输出故障

  • 本文关键字:故障 输出 c output
  • 更新时间 :
  • 英文 :


这是我的程序。我正在尝试找到字符串每个字符的频率并显示它。在回答时,请注意我不想尝试 ASCII 概念,我想知道这个概念有什么问题。

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main()
{
int l=0,j,k,m,count[10000];
char string[10000];
printf("Enter the string : n");
scanf("%s",string);
l=strlen(string);
printf("%d",l);
for(j=0;j<l;j++)
    {
        for(k=j+1;k<l;k++)
        {
            if(string[j]==string[k])
            {
                count[j]++;
            }
        }
    }
for(m=0;m<l;m++)
    {
       printf("%d",count[m]);
    }
return 0;
}

所以你希望找到字符串中字符的频率。

关于代码中的错误:

  • 考虑字符串 lalal 在这里,您将对最后l进行两次计数,一次对应于第一个l,第二次对应于第三个l。因此,你的逻辑是错误的。
  • 类似的情况是 count[] .您尚未初始化数组,因此它包含垃圾值

因此,解决问题的另一种方法是声明一个 26 个元素的数组(英文字母(,遍历整个列表并在找到该元素时递增对应于每个元素的计数。

int frequencyChar[26] = {0};//stores frequency of characters [a-z], initialized to zero
for( i=0; i<strlen(str); i++) //iterate through the entire string
{
    frequencyChar[str[i] - 'a']++; //increment count corresponding to each element
}
for( i=0; i<26; i++) 
{
    printf("%dn",frequencyChar[i]);
}

P.S.上面的代码只假设字符串中的小写字符。微小的更改将允许包含大写字母!

以下是问题:

  1. 您已经编写了:I am trying to find the frequency of each character,但您的代码正在尝试计算字符对之间的相关性直方图。
  2. 作为count的索引,您使用 j ,它迭代字符串中的构成字符。这意味着您的表count有很多0,只有一些1,没有其他内容。
  3. 所以目前这不是字符对的直方图,也不是字符的直方图。

字符直方图可以像这样创建:

void makeStrHistogram(char *str, int histogram[256])
{
    memset(histogram, 0, sizeof(histogram));
    while (*str) histogram[*str++]++;
}
void printHistogram(int histogram[256])
{
    for (int i=0; i<256; ++i) {
       if (histogram[i]) {
            printf("%c - %dn", (char)i, histogram[i]);
       }
    }
}

生成字符相关矩阵:

void correlationMatrixForStr(char *str, int matrix[256][256])
{
    memset(matrix, 0, sizeof(matrix));
    int len = strlen(str);
    for (int i=0; i<len; ++i) {
        for (int j=i+1; j<len; ++j) {
            matrix[i][j]++;
        }
    }
}

最新更新