检查简单数组中的重复字符[C]

时间:2014-04-03 18:13:40

标签: c arrays character recurring

评论“重复出现的字符代码”的部分有点瑕疵,因为稍后当我尝试打印字母和出现次数时,字母是正确的,但出现次数是一些随机数。有人可以解释我的逻辑错误吗?

#include <stdio.h>
#include <stdlib.h>
#define MAX 20

int main()
{
//declare variables
char arr[MAX], ch;
int counter1 = 0, counter2 = 0, i, j, temp, mostcommon[128], x = 0, y = 0;

//ask for user input until array reaches MAX or is interrupted by the 'X' character and append arr[i]
for(i = 0; i < MAX; i++)
{
    printf("Input %d. character into array: ", i + 1);
    ch = getchar();
    if (ch == 'X'){
    break;
    }
    getchar();
    arr[i] = ch;
    counter1++;
}

//recurring characters code
for (i = 0; i < 128; i++){
mostcommon[i] = 0;
}

x = mostcommon[0];
y = 0;

for (i = 0; i < counter1; i++)
{
    mostcommon[(int) arr[i]] += i;
}

for (i = 0; i < 128; i++){
    if (x < mostcommon[i]){
        x = mostcommon[i];
        y = i;
     }
}

//print array as it was appended
printf ("\nArray:");
for (i = 0; i < counter1; i++)
{
    printf("\narray[%d] = %c", i, arr[i]);
}

//sort array by descending ASCII value
for(i = 0; i < counter1 - 1; i++)
{
    for(j = i + 1; j < counter1; j++)
    {
        if (arr[i] < arr[j])
        {
            temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
}

//print sorted array
printf ("\n\nSorted array:");
for (i = 0; i < counter1; i++)
{
    printf("\narray[%d] = %c", i, arr[i]);
}

//print array without reoccuring characters
printf ("\n\nFinal array:");
for (i = 0; i < counter1; i++)
{
    if (arr[i] != arr[i-1]){
    printf("\narray[%d] = %c", counter2, arr[i]);
    counter2++;
    }
}

printf("\n\nThe most common character is %c and it recurred %d times", y, x);

return 0;
}

1 个答案:

答案 0 :(得分:0)

之前的一点说明: *你不应该在循环开始时提出counter1吗?因为如果你不这样做 - 当输入X时它不会引发counter1,我想你想要输入多少个字符。

现在到代码 - 循环中的第一个:

for (i = 0; i < counter1; i++)
{
    mostcommon[(int) arr[i]] += i;
}

你的目的是什么?如果你想要出现该字符的次数,那么循环应如下所示:

for(i = 0 ; i < counter1 ; i++)
{
    mostcommon[(int)arr[i]]++;
}

因为“+ = i”根据我的理解没有任何目的 - 所以它会像你描述的那样随机。希望它有所帮助。