สมมติว่าเรามีสตริง 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)