2017-01-18 8 views
-1

Ich schrieb ein Programm, das einen gemeinsamen Buchstaben in einer Zeichenfolge findet, ich beabsichtige, diesen Brief zu drucken, und den Buchstaben, der am zweithäufigsten ist, wie erreiche ich das?Wie drucke ich das nächste gemeinsame Element in einer Zeichenfolge?

Hier ist mein Code:

#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); 
} 

Dank.

+0

Der Code für diese Frage zu [Swap zwei häufigsten Zeichen in einer Zeichenfolge] (https://stackoverflow.com/questions/41664603/) - eine Frage, die eigentlich einen ganz anderen Titel hat, aber das Ziel ist eng damit verwandt (es geht weiter, alle Vorkommen der häufigsten mit dem zweithäufigsten Buchstaben und alle Vorkommen der zweithäufigsten mit dem gebräuchlichsten Buchstaben zu tauschen, aber das ist Quiz). Der Code zum Finden des maximalen und zweiten Maximums ist dem [Xzenon] (https://stackoverflow.com/users/2491551/xzenon) sehr ähnlich. –

Antwort

0

Verwendung Code wie unten ein: -

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; 
    } 
} 

jetzt Sie leicht max1i und max2i Index drucken diese Zeichen

+0

Ich glaube nicht, dass Sie die Frage richtig gelesen haben, er möchte die Zeichen, nicht die Anzahl der Vorkommen. – Xzenon

+0

er kann max 1 oder max2 verwenden, um diese Zeichen leicht zu bekommen .. Ich habe nur gesagt, wie diese maximalen Werte zu bekommen –

+0

Vor allem haben Sie hinzugefügt, nachdem ich meinen Kommentar gepostet. Zweitens hat Ihre Lösung Fehler. Beispiel: freq ['a'] = 5, freq ['b'] = 2; freq ['c'] = 6 gibt Ihnen max = 6 und max2 = 2 (nicht 5). – Xzenon

2

Ich denke, die Kommentare im Code genug sein wird für Sie zu verstehen, nutzen können.

// 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); 
Verwandte Themen