นับจำนวนครั้งที่ตัวอักษรแต่ละตัวปรากฏในสตริง แยกเป็นพิมพ์ใหญ่/เล็ก หรือรวมกัน (Case Insensitive)
อัลกอริทึม
- อ่าน String จากผู้ใช้
- หาความยาว String
- Initialize Frequency Array = 0
- วน Loop นับ: ถ้า a-z → `freq[ch-'a']++`, ถ้า A-Z → `freq[ch-'A']++`
- แสดงผลเฉพาะตัวที่ freq > 0
ตัวอย่างโปรแกรม (Case Insensitive - รวมพิมพ์ใหญ่เล็ก)
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX 100
int main() {
char str[MAX];
int freq[26] = {0}; // a-z only
int i, len;
printf("Enter string: ");
fgets(str, MAX, stdin);
str[strcspn(str, "\n")] = '\0';
len = strlen(str);
for(i = 0; i < len; i++) {
if(isalpha(str[i])) {
char lower = tolower(str[i]);
freq[lower - 'a']++;
}
}
printf("\nFrequency of each letter (case-insensitive):\n");
for(i = 0; i < 26; i++) {
if(freq[i] > 0) {
printf("'%c' = %d\n", 'a' + i, freq[i]);
}
}
return 0;
}
ผลลัพธ์
Enter string: Tutorials Point Frequency of each letter (case-insensitive): 'a' = 1 'i' = 2 'l' = 1 'n' = 1 'o' = 2 'p' = 1 'r' = 1 's' = 1 't' = 3
ตัวอย่างโปรแกรม (Case Sensitive - แยกพิมพ์ใหญ่/เล็ก)
#include <stdio.h>
#include <string.h>
#define MAX 100
#define CHARS 256
int main() {
char str[MAX];
int freq[CHARS] = {0};
printf("Enter string: ");
fgets(str, MAX, stdin);
str[strcspn(str, "\n")] = '\0';
for(int i = 0; str[i]; i++) {
unsigned char c = str[i];
freq[c]++;
}
printf("\nFrequency (Case Sensitive):\n");
for(int i = 0; i < CHARS; i++) {
if(freq[i] > 0) {
if(i >= 32 && i <= 126)
printf("'%c' = %d\n", i, freq[i]);
else
printf("ASCII %d = %d\n", i, freq[i]);
}
}
return 0;
}
ผลลัพธ์ (Case Sensitive)
Enter string: Tutorials Point Frequency (Case Sensitive): ' ' = 1 'P' = 1 'T' = 1 'i' = 2 'l' = 1 'n' = 1 'o' = 2 'p' = 1 'r' = 1 's' = 1 't' = 2 'u' = 1
การใช้งานจริง
- Text Analysis - Word Frequency, Letter Frequency
- Cryptanalysis - Frequency Analysis แบบ Classical Cipher
- Compression - Huffman Coding ต้องการ Frequency Table
- Validation - ตรวจสอบ Character Set
ความซับซ้อน
- Time: O(n) - Single Pass
- Space: O(1) - Fixed Array (26 หรือ 256)
ขยาย: Unicode/UTF-8 Support
C Standard ไม่รองรับ Unicode โดยตรง ต้องใช้ Library:
- ICU (International Components for Unicode)
- libutf8proc
- Glib (g_utf8_strlen, g_unichar_*)
// Concept สำหรับ UTF-8 (ต้องใช้ Library)
gunichar ch;
const char *p = str;
while(*p) {
ch = g_utf8_get_char(p);
freq[ch]++; // ต้องใช้ Hash Map เพราะ Unicode มี 1M+ Codepoints
p = g_utf8_next_char(p);
}