Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

โปรแกรม C หาความถี่ของแต่ละหลักในสตริง


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