CountChars数组字符串循环函数字母出现次数

标签 c function loops char letter

我正在努力提高我在 c 方面的技能,在了解使用函数 计算字符串中字母出现的不同方法时,我有点困惑,这会很棒收到关于我如何改进代码或计算一个字母在带有函数的字符串中出现次数的新方法的不同意见。

有什么建议吗?

#include <stdio.h>

int countingCharacters(char *message, int size, char charToBeCounted);


int main() {

    char arrMess[13] = { "hejsanSvejsan" };
    char charsToBeCounted = 'a';

    for (int i = 'a'; i <= 'z'; i++) {

        printf("%c, %d:\n", charsToBeCounted, countingCharacters(arrMess, 13, charsToBeCounted));
        charsToBeCounted++;

    }
    getchar();
    return 0;
}

int countingCharacters(char *message, int size, char charToBeCounted) {

    int counter = 0;
    int i = 0;

    while (i < size)
    {
        if (message[i] == charToBeCounted)
            counter++;
        i++;
    }
    return counter;
}

最佳答案

如果您的代码正在计算字符串中的每个字母(a 到 z),您可以一次完成并使用一个数组来跟踪每个字母的数量。类似的东西:

void countingCharacters(char *message, unsigned int count[]) {
    while(*message) {
        if(isalpha(*message)) {
            count[tolower(*message)-'a']++;
        }
        message++;
    }
}

int main() {

    char arrMess[] = { "hejsanSvejsan" };
    char i;
    unsigned int count[26] = { 0 };

    countingCharacters(arrMess,count);
    for(i='a';i<='z';i++) {
        printf("%c, %d:\n", i, count[i-'a']);
    }
    return 0;
}

顺便说一下,我删除了arrMess 大小的硬编码,因为它是错误的。您的字符串有 13 个字符长,这对于大小为 13 的字符数组来说太大了,因为您需要 1 个额外的字符来存储它末尾的 '\0'

关于CountChars数组字符串循环函数字母出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43546196/

相关文章:

c++将函数作为参数传递给另一个带有void指针的函数

c++ - C++ 中的 IF 循环行为

c++ - 否定包含 && 运算符的表达式

c - 将参数传递给 execvp() 时出错

android - 使用动态库交叉编译 C 代码时出错

c - Arduino NTP,我想打印数据(DD-MM-YYYY)

c++ - 更改代码块中的链接器顺序

来自 MySQL 查询的 PHP cron 作业

Javascript 表单

list - 如何将两个变量列表相乘