2015-08-18 3 views
1

Я пытаюсь получить наиболее часто встречающиеся символы из массива.Получение наиболее часто встречающихся символов в массиве в c

Вот мой код

#include <stdio.h> 

int main(void) 
{ 
    int c[1000]; 
    char input[] = "abcdab";  
    int i; 

    for(i=0; input[i]; i++) 
    { 
     c[input[i]]++; 
    } 

    int j = 0; 
    char str = 0; 

    for(i=0; i<256; i++) 
    { 
     if(c[i] > j) 
     { 
      j = c[i]; 
      str = i; 
     } 
    } 

    printf("%c\n", str); 
    return 0; 
} 

возвращает «а»

Но я хочу, чтобы получить «A» и «B», так как они являются наиболее частыми символов в массиве. Любая помощь будет оценена, спасибо.

+0

@Olaf Это похоже на довольно короткий и полный пример, в которое было включено желаемое поведение, проблема была упомянута (они получают не a & b). – leigero

+0

Лучше использовать 'c [(unsigned char) input [i]] ++;' для предотвращения отрицательного индекса в массиве. – chux

ответ

1

Вы проходите через весь массив, ища максимум, и помните о первом. С помощью решения у вас есть, вам потребуется дополнительный цикл:

for(i=0; i<256; i++){ // Look for all maximums 
    if(c[i] == j) // If it is the maximum 
    { 
     printf("%c\n", i); // print the character 
    } 
} 

Обратите внимание, что ваш массив c не инициализируются все нули, так что чисто случайно (не совсем), что код работает. Если вы хотите, чтобы c был нулевым, вам нужно объявить его как int c[1000] = {0}; или позвонить по телефону memset.

Смежные вопросы