c - 如何在C中查找字符数组中出现的次数?

标签 c arrays char

我正在尝试输入一个单词,并获取该字母被输入的次数。

假设我的输入是“你好”

我的输出将是:h = 1,e = 1 l = 2 等。

我非常接近正确,但我对这段代码有一个小问题:

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

void find_frequency(char s[], int count[]) {
    int c = 0;

    while (s[c] != '\0') {
        if (s[c] >= 'a' && s[c] <= 'z' )
            count[s[c]-'a']++;
        c++;
    }
}

int main()
{
    char string[100];
    int c, count[26] = {0};

    printf("Input a string\n");
    gets(string);

    find_frequency(string, count);

    printf("Character Count\n");

    for (c = 0 ; c < 26 ; c++)
        if(count[c] > 0)
            printf("%c : %d\n", c + 'a', count[c]);
    return 0;
}

这段代码完成了一半的工作,但不是全部。

它的输出按字母顺序排列。我如何更改它以仅提供输入的字符数组的输出?

最佳答案

Ry- this comment中建议您可以迭代原始字符串并使用字符作为频率表的索引。类似于以下内容:

int len_string = strlen(string);

for (c=0; c<len_string; c++) {
  char ch = string[c];
  printf("%c: %d, ", ch, count[ch-'a']);
}

这不会完全符合您的预期输出,因为此代码将输出 l: 2 两次,但这提出了一个问题:

当您有像 abba 这样的字符串时,您的预期输出是什么? a:2,b:2a:1,b:2,a:1a:2,b:2,a:2?当你问这样一个模棱两可的问题时,很难提供帮助。

关于c - 如何在C中查找字符数组中出现的次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52674344/

相关文章:

c - Linux 内核 I/O

同时计算来自多个客户端的数据

java - char 文字 '\"' 与 '"' 相同吗?(反斜杠双引号与仅双引号)

c - 为什么使用 select() 而不是 sleep()?

javascript - 将一个数组的每个元素乘以另一个数组的部分的方法?

arrays - QuickSort 不能应用于 ArrayBuffer 在 Scala 中就地进行排序

javascript - 如何将时间戳转换为 UTCString 并防止浏览器将日期更改为本地时区?

C Array char - 当我尝试写入位置 0 时,程序写入位置 0 和 1

c# - 为什么 Console.WriteLine() 函数会遗漏字符串中的某些字符?

c++ - 如何检查特定路径中不在 CWD 中的目录?