计算数组中每个char的数量

时间:2016-12-01 16:52:31

标签: c arrays counter

我正在尝试显示用户选择的句子中哪个字符和每个字符的数量。因此,如果用户输入“Hello World!”该程序应该返回一个字符及其使用次数。

" SPACE:1, !:1, H:1, W:1, e:1, d:1, l:3, o:2, r:1,"

我在交换机中使用它,因为我有其他选择供用户选择。

现在我可以知道使用了哪些字符以及从SPACE到Q中有多少字符。我也可以输出所有小写字母,但如果它读成'a'则表示有1' '和一个空格(用ASCII代码从32开始,随着小写字母的增加而上升)。

这些是我使用的变量。

int menyval = 0, i, k = 0, h, j, count, count2;
char input, str[100], getridof, add, character;

这是我在这种情况下所拥有的。

printf("Write a string not more then 50 chars:\n");
        getchar();
        i = 0;
        j = 0;
        count = 0;
        int counts[50] = { 0 };
        gets(str);
        str[j] = str[i];
            while (str[i] != '\0') {


                if (str[i] >= 97 && str[i] <= 122) {
                    counts[str[i] - 97]++;
                }
                i++;
                count++;
            }

            for (i = 0; i < 50; i++) {
                if (counts[i] != 0) {
                    printf("%c: %d\n", i + 97, counts[i]);
                }
            }

            while (str[j] != '\0') {


                if (((str[j] >= 32 && str[j] <=96)) || ((str[j] >=123 && str[j] <= 126))) {
                    counts[str[j] - 32]++;
                }
                j++;
            }

            for (j = 0; j < 50; j++) {
                if (counts[j] != 0 ) {
                    //if((j) < 127)
                    printf("%c: %d\n", j + 32, counts[j]);
                }
            }
        printf("Total amount of char: %d\n", count);
        str[i] = '\0';
        system("pause");
        system("cls");

这是一项学校作业,所以我理解你是否不想说直接代码,但我会非常感谢一些提示,指出我正确的方向。

2 个答案:

答案 0 :(得分:1)

ACII表:http://www.asciitable.com/

    char str[12] = "hello world";

    // initialize an array of each possible character
    int charCount[128];
    memset(charCount, 0, sizeof(charCount));

    // iterate through the array of characters
    // incrementing the index in charCount matching the element in str
    char* currChar = str;
    while(*currChar)
            ++charCount[*(currChar++)];

    // iterate through the array once more
    for(int i = 0; i < 128; ++i) {
            // if the character was found in the string,
            // print it and its count
            if(charCount[i]) {
                    printf("%c: %d\n",i,charCount[i]);
            }
    }

答案 1 :(得分:1)

我很少纠正并以这种方式清除你自己的代码:

  1. 删除未使用变量的声明
  2. 将所有声明置于顶部
  3. 删除无用的命令。
  4. &#34;魔术&#34; 号码改为6597改为符号'A''a' - 是,{ {1}} 数字。
  5. 为代码的各个部分添加评论
  6. 当然 - 纠正错误,主要是:
    1. 重置计数器
    2. 不连续符号范围(原始条件中为char)拆分为2 连续
  7. 现在完整的代码是:

    ||

    我测试了它,现在它工作正常 - 尽管它仍然很难看。但它主要是你的代码,所以你理解它