समस्या
स्ट्रिंग में सबसे अधिक बार आने वाला कैरेक्टर और उसकी आवृत्ति ज्ञात करें।
एल्गोरिदम
- फ्रीक्वेंसी ऐरे इनिशियलाइज़ करें (आकार 256 सभी ASCII के लिए)।
- स्ट्रिंग ट्रैवर्स करें, प्रत्येक कैरेक्टर की फ्रीक्वेंसी बढ़ाएं।
- अधिकतम फ्रीक्वेंसी वाला कैरेक्टर ढूंढें।
C प्रोग्राम
#include <stdio.h>
#define SIZE 100
#define CHARS 256
int main() {
char string[SIZE];
int freq[CHARS] = {0};
int i, max_char = 0;
printf("Enter string: ");
gets(string);
for(i = 0; string[i] != '\0'; i++) {
freq[(unsigned char)string[i]]++;
}
for(i = 1; i < CHARS; i++) {
if(freq[i] > freq[max_char])
max_char = i;
}
printf("Max occurring char: '%c' = %d times\n", max_char, freq[max_char]);
return 0;
}
आउटपुट
Enter string: tutorials point Max occurring char: 't' = 3 times
केस-इनसेंसिटिव संस्करण
#include <ctype.h>
// ...
char ch = tolower(string[i]);
freq[(unsigned char)ch]++;
किनारे के मामले
- खाली स्ट्रिंग: हैंडल करें।
- एकाधिक कैरेक्टर्स समान मैक्स फ्रीक्वेंसी: पहला मिला हुआ प्रिंट होता है (सभी प्रिंट करने के लिए लूप मोडिफाई करें)।
- नॉन-प्रिंटेबल कैरेक्टर्स: फ्रीक्वेंसी ऐरे में गिने जाते हैं।
सभी कैरेक्टर्स की फ्रीक्वेंसी प्रिंट करना
for(i = 0; i < CHARS; i++) {
if(freq[i] > 0 && isprint(i))
printf("'%c' = %d\n", i, freq[i]);
}