Menu
Coddy logo textTech

Tekrar: Kelime Frekans Sayacı

Coddy'nin C Journey'sinin Logic & Flow bölümünün bir parçası — ders 63 / 63.

challenge icon

Görev

Kolay

Metin girişini analiz etmek için bir kelime frekans sayacı uygulayan bir C programı oluşturun. Programınız şunları yapmalıdır:

  1. Aşağıdaki özelliklere sahip countWordOccurrences adında bir fonksiyon yazın:
    • İki adet char* parametresi alır: sentence ve targetWord
    • Hedef kelimenin cümlede kaç kez geçtiğini temsil eden bir tam sayı döndürür
    • Cümleyi karakter karakter işlemek için bir döngü kullanır
    • Boşlukları sınırlayıcı olarak kullanarak kelime sınırlarını belirler
    • Cümledeki her bir kelimeyi çıkarır ve strcmp() kullanarak hedef kelimeyle karşılaştırır
    • Tam eşleşmeleri sayar (büyük/küçük harf duyarlı karşılaştırma)
  2. Aşağıdaki özelliklere sahip extractWord adında bir fonksiyon yazın:
    • Bir char* sentence, bir tam sayı startIndex ve bir char* word parametresi alır
    • Çıkarılan kelimeden sonraki indeksi temsil eden bir tam sayı döndürür
    • startIndex'ten başlayarak bir boşluk veya null sonlandırıcı bulunana kadar tek bir kelime çıkarır
    • Çıkarılan kelimeyi word parametresinde saklar
    • Çıkarılan kelimeyi tamamlamak için bir null sonlandırıcı ekler
  3. Aşağıdaki özelliklere sahip analyzeText adında bir fonksiyon yazın:
    • Bir char* sentence parametresi alır
    • Cümledeki toplam kelime sayısını temsil eden bir tam sayı döndürür
    • Boşlukları ayırıcı olarak tanımlayarak kelimeleri sayar
    • Birden fazla ardışık boşluğu doğru şekilde işler (onları tek bir ayırıcı olarak kabul eder)
  4. Ana fonksiyonda (main function):
    • 200 boyutunda bir inputSentence karakter dizisi tanımlayın
    • 50 boyutunda bir searchWord karakter dizisi tanımlayın
    • Girişten bir cümle okuyun (boşluklarla ayrılmış birden fazla kelime içerebilir)
    • Aranacak bir hedef kelime okuyun
    • analyzeText fonksiyonunu çağırın ve toplam kelime sayısını tam olarak şu formatta yazdırın: Total words: [count]
    • countWordOccurrences fonksiyonunu çağırın ve sonucu tam olarak şu formatta yazdırın: Occurrences of '[searchWord]': [count]
    • Kelime frekansını yüzde olarak, tam olarak 1 ondalık basamakla şu formatta hesaplayın ve yazdırın: Frequency: [percentage]%
    • Frekans kategorisini belirleyin ve yazdırın:
      • Eğer frekans 0.0% ise: Category: Not found yazdırın
      • Eğer frekans 0.0%'dan büyük ancak 20.0%'dan küçükse: Category: Rare yazdırın
      • Eğer frekans 20.0% ile 50.0% arasındaysa (dahil): Category: Common yazdırın
      • Eğer frekans 50.0%'dan büyükse: Category: Frequent yazdırın

Bu meydan okuma, dize manipülasyonu, tokenizasyon ve metin işleme konusundaki ustalığınızı test eder. Cümleleri tek tek kelimelere ayırma, dizeleri tam eşleşmeler için karşılaştırma ve metin verilerini analiz etmek için birlikte çalışan birden fazla fonksiyon uygulama pratiği yapacaksınız. Program, birçok C uygulaması için gerekli olan gerçek dünya metin işleme tekniklerini göstermektedir.

Kendin dene

#include <stdio.h>
#include <string.h>

// TODO: extractWord fonksiyonunuzu buraya yazın

// TODO: countWordOccurrences fonksiyonunuzu buraya yazın

// TODO: analyzeText fonksiyonunuzu buraya yazın

int main() {
    char inputSentence[200];
    char searchWord[50];
    
    // Giriş cümlesini oku
    fgets(inputSentence, sizeof(inputSentence), stdin);
    // Eğer varsa yeni satır karakterini kaldır
    inputSentence[strcspn(inputSentence, "\n")] = '\0';
    
    // Aranacak kelimeyi oku
    scanf("%s", searchWord);
    
    // TODO: Kodunuzu aşağıya yazın
    // analyzeText fonksiyonunu çağırın ve toplam kelime sayısını saklayın
    // countWordOccurrences fonksiyonunu çağırın ve eşleşme sayısını saklayın
    // Frekans yüzdesini hesaplayın
    // Frekans kategorisini belirleyin
    
    // Sonuçları istenen formatta yazdırın
    // printf("Total words: %d\n", totalWords);
    // printf("Occurrences of '%s': %d\n", searchWord, occurrences);
    // printf("Frequency: %.1f%%\n", frequency);
    // printf("Category: %s\n", category);
    
    return 0;
}

Logic & Flow bölümündeki tüm dersler