2017-01-18 2 views
-1

Я написал программу, которая находит общую букву в строке, я намереваюсь напечатать эту букву, а письмо, которое является вторым наиболее распространенным, как мне это достичь?Как напечатать следующий общий элемент в строке?

Вот мой код:

#include <stdlib.h> 
#include <stdio.h> 
#include <math.h> 
#include <time.h> 

#define MAX 10 
#define MAX_FREQ 256 
int main() 
{ 
    char string[MAX] = {0}; 

    int i = 0; 
    int freq[MAX_FREQ] = {0}; 

    printf("Enter a String: "); 
    fgets(string, MAX, stdin); 
    if(string[strlen(string)-1] == '\n') {string[strlen(string)-1] = 0;} 

    for(i = 0; string[i]; i++) 
    { 
     freq[string[i]]++; 
    } 

    for(i = 0; i < MAX_FREQ; i++) 
    { 
     if(freq[i]) 
     { 
      printf("Most common: %c, 2nd most common: %c\n", i, i-1); 
     } 
    } 
    return (0); 
} 

Спасибо.

+0

Код для этого вопрос о [своп двух наиболее часто встречающихся символов в строке] (https://stackoverflow.com/questions/41664603/) - вопрос, который на самом деле имеет совершенно другое название, но цель тесно связан с этим (он идет дальше, заменяя все вхождения наиболее распространенных со второй наиболее распространенной буквой, и все вхождения второго наиболее распространенного с самой общей буквой, но это пустяки). Код для поиска максимального и второго максимума очень похож на [Xzenon] (https://stackoverflow.com/users/2491551/xzenon). –

ответ

0

используйте следующий код ниже: -

int max = INT_MIN , max2 = INT_MIN,maxi,max2i; //using <limits.h> 
for(i = 0; i < MAX_FREQ; i++) 
{ 

    if(max<=freq[i]) 
    { 
     max = freq[i]; 
     maxi =i; 
    } 

    if(freq[i]<=max && freq[i]=>Max && max1i! =i) 
    {max2 = freq[i]; 
     max2i = i; 
    } 
} 

теперь вы можете легко использовать max1i и max2i индекс для печати этих символов

+0

Я не думаю, что вы правильно прочитали вопрос, он хочет символов, а не количество вхождений. – Xzenon

+0

он может использовать max 1 или max2, чтобы легко получить этот символ. Я просто сказал, как получить эти максимальные значения –

+0

Прежде всего, вы добавили тех, КОТОРЫЕ Я отправил свой комментарий. Во-вторых, ваше решение имеет недостатки. Пример: freq ['a'] = 5, freq ['b'] = 2; freq ['c'] = 6 даст вам max = 6 и max2 = 2 (не 5). – Xzenon

2

Я думаю, что комментарии в коде будут достаточно для того, чтобы понять.

// max - most common, snd - second most common 
int max_freq = 0, snd_freq = 0; 
char max_char, snd_char; 

// iterate through frequency array 
for (int i = 0; i < MAX_FREQ; i++) 
{ 
    if (freq[i] > max_freq) 
    { 
     /* 
     * we had a previous max_freq that satisfied max_freq > snd_freq 
     * since we found a new freq > max_freq, we'll change snd_freq as well 
     * to max_freq 
     * order: freq[i] > max_freq > snd_freq 
     */ 

     snd_freq = max_freq; 
     max_freq = i; //it'll be converted, don't worry 

     snd_char = max_char; 
     max_char = str[i]; 
    } 
    else if (freq[i] > snd_freq) 
    { 
     snd_freq = freq[i]; 
     snd_char = i; 
    } 
} 

// print most and second most common characters 
printf("%c %c", max_char, snd_char); 
Смежные вопросы