สมมติว่าเรามีสตริง s s ประกอบด้วยตัวอักษรและตัวเลขทั้งคู่ เราจะต้องค้นหาความถี่ของแต่ละหลักและแสดงผล ในการทำเช่นนี้ เราสามารถสร้างอาร์เรย์ขนาด 10 สำหรับแต่ละหลัก (0 ถึง 9) ได้ โดยในตอนแรกองค์ประกอบทั้งหมดจะเป็น 0 ภายในอาร์เรย์ จากนั้นเมื่อเราพบตัวเลขเพียงเพิ่มค่าของดัชนีนั้นและพิมพ์ออกมาทั้งหมดในที่สุดพี>
ดังนั้น หากอินพุตเป็น s ="we85abc586wow236h69" ผลลัพธ์จะเป็น (หมายเลข 2 ความถี่ 1) (หมายเลข 3 ความถี่ 1) (หมายเลข 5 ความถี่ 2) (หมายเลข 6 ความถี่ 3) (หมายเลข 8 ความถี่ 2) (หมายเลข 9, ความถี่ 1)
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดความถี่อาร์เรย์ขนาด:10 และเริ่มต้นองค์ประกอบทั้งหมดด้วย 0
-
สำหรับการเริ่มต้น i :=0 เมื่อ i
-
ถ้า s[i] เป็นตัวเลข ดังนั้น:
-
เพิ่มความถี่[s[i] - ASCII ของ '0'] ขึ้น 1
-
-
-
สำหรับการเริ่มต้น i :=0 เมื่อฉัน <10 อัปเดต (เพิ่ม i ขึ้น 1) ให้ทำ:
-
ถ้า freq[i]> 0 แล้ว:
-
จอแสดงผล (หมายเลข i , ความถี่ความถี่[i])
-
-
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <stdio.h> #include <string.h> void solve(char *s){ int freq[10] = {0}; for(int i = 0; i < strlen(s); i++){ if(s[i] >= '0' && s[i] <= '9'){ freq[s[i] - '0']++ ; } } for(int i = 0; i<10; i++){ if(freq[i] > 0) printf("(Number %d, Freq %d)\n", i, freq[i]); } } int main(){ char *s = "we85abc586wow236h69"; solve(s); }
อินพุต
"we85abc586wow236h69"
ผลลัพธ์
(Number 2, Freq 1) (Number 3, Freq 1) (Number 5, Freq 2) (Number 6, Freq 3) (Number 8, Freq 2) (Number 9, Freq 1)