String'de En çok Tekrar Eden Harfi Bulma

steve78

Doçent
Katılım
20 Haziran 2012
Mesajlar
800
Reaksiyon puanı
48
Puanları
28
Arkadaşlar merhaba,

Bir string'de en çok tekrar eden harfi nasıl bulabiliriz? (C dilinde) Örneğin "araba" kelimesinde en çok a harfi kullanılmıştır çıktısını almak istiyorum.
 

Ben Kenobi

Dekan
Katılım
6 Kasım 2011
Mesajlar
7,336
Reaksiyon puanı
3,155
Puanları
113
Alfabe sayısı kadar int array oluştur.
Sonra stringi char arraya ayırıp döngü içinde kontrol et misal a için int arrayin 0. elemanı b için 1. vs derken en sonunda bulursun.
 

emrah08

Öğrenci
Katılım
20 Haziran 2012
Mesajlar
64
Reaksiyon puanı
2
Puanları
8
Normalde her harfin kaçar adet olduğunu listeleyerek yazdırmak daha mantıklı ancak sadece en büyük harfin hangisi olduğunu görmek istiyorsan aşağıdaki kodu inceleyerek C diline uyarlayabilirsin. Ayrıca girilen kelimede bazı kelimelerin eşit sayıda olması durumunda en fazla sayıya sahip tek bir harf olmaması durumunda bir mesaj verektir.


Kod:
  Console.Write("Yazı Giriniz:");
            string Yazi = Console.ReadLine();
            char[] Harfler = Yazi.ToCharArray();

            int EnBuyukHarfSayisi = 0;
            int EnBuyukEsitHarferSayisi = 0;
            char EnBuyukHarf = '\0';

            // iç içe döngüyle kelimenin harfleri kontrol edilerek aynı olan harf ve sayısı tespit ediliyor.
            for (int i = 0; i < Harfler.Length; i++)
            {
                int Toplam = 0;

                for (int j = 0; j < Harfler.Length; j++)
                {
                    // Aynı olan harfler sayılıyor.
                    // Eğer Daha önce yazdırılan harf ve sayısı kontrol edilerek tekrar sayılması engelleniyor.
                    if ((Harfler[i] == Harfler[j]) && (EnBuyukHarf != Harfler[i]))
                    {
                        Toplam++;
                    }
                }
                // Harf sayısı toplamı en son büyük harf sayısından büyükse yeni değerler atanıyor.
                if (Toplam > EnBuyukHarfSayisi)
                {
                    EnBuyukHarfSayisi = Toplam;
                    EnBuyukHarf = Harfler[i];
                }
                // Eğer sayılan harf sayısı toplamı en büyük harf sayısına eşitse EnBuyukEsitHarferSayisi değişkenine aktarılıyor.
                else if (Toplam == EnBuyukHarfSayisi)
                    EnBuyukEsitHarferSayisi = Toplam;

            }
            // En büyük harf sayısı, birbilerine eşit olan harflerin sayısından büyükse ekrana yazdırılıyor.
            // Değilse En fazla sayıya sahip bir değişkenin olmadığı ekrana yazdırılıyor.
            if (EnBuyukHarfSayisi > EnBuyukEsitHarferSayisi)
            {
                Console.WriteLine("{0} harfinden toplam {1} adet vardır.", EnBuyukHarf, EnBuyukHarfSayisi);
            }
            else
            {
                Console.WriteLine("En fazla sayıya sahip harf bulunamadı. ");
            }
            Console.ReadLine();
 

Samet UCA

Profesör
Katılım
3 Ağustos 2012
Mesajlar
3,288
Reaksiyon puanı
2,930
Puanları
178
Burada ben araba kelimesine göre ayarladım. Bu algoritma fazlasıyla uzun eminimki bir kaç satıra kadar düşürülebilir ancak çok acil lazım ise bunu kullan. Sonra kısaltmasına bakarız.
Kod:
#include <stdio.h>
#include <string.h>

int main()
{
char kelime[5]; // samet
char harfadi = 'A';
int encok =0;
int a = 0;
int b = 0;
int r = 0;

printf("Maksimum 5 harfden olusan bir kelime giriniz\n");
scanf("%s",kelime);
for(int i=0;i<5;i++)
{
  if(kelime[i]=='a')
  {
    a++;
    if(encok<a)
    {
      encok = a;
      harfadi = 'A';
    }
  }
  if(kelime[i]=='r')
  {
    r++;
    if(encok<r)
    {
      encok = r;
      harfadi ='R';
    }
  }
  if(kelime[i]=='b')
  {
    b++;
    if(encok<b)
    {
      encok = b;
      harfadi='B';
    }
  }

}
printf("Kelimede en cok %c harfi kullanilmistir.\nKullanim sayisi : %d",harfadi,encok);
}

Harfin kaç kez kullanıldığı + hangi harfin kullanıldığını hesaplar.
Tüm alfabeyi istiyorsan for göbeğine eklemeleri sen yaparsın. Algoritma çöp ama belki işine yarar kolay gelsin :)
hud8Nw
 

Ekli dosyalar

  • 2017-12-08_22-15-57.png
    2017-12-08_22-15-57.png
    68.7 KB · Görüntüleme: 1,244
Son düzenleme:

steve78

Doçent
Katılım
20 Haziran 2012
Mesajlar
800
Reaksiyon puanı
48
Puanları
28
Teşekkürler arkadaşlar bende şu şekilde yaptım tüm harfleri tutan bir dizi oluşturdum. Aynı şekilde her harf için sayac oluşturdum bunu da bir dizide tuttum. Girilen kelimenin harfi, tüm harflerin bulunduğu dizideki hangi indiste eşitse sayacın o indisinde bulunan değeri bir artırdım. Daha sonra sayac dizisini bobule short ile büyükten küçüğe doğru sıraladım. Bu sıralamayı yaparken tüm harflerin bulunduğu diziyi de buna göre sıralattırdım. Böyle olunca tüm harflerin bulunduğu dizideki 0. indise sayacı en büyük olan harf gelmiş oldu. Bu sayede buldum :)
 

Samet UCA

Profesör
Katılım
3 Ağustos 2012
Mesajlar
3,288
Reaksiyon puanı
2,930
Puanları
178
Teşekkürler arkadaşlar bende şu şekilde yaptım tüm harfleri tutan bir dizi oluşturdum. Aynı şekilde her harf için sayac oluşturdum bunu da bir dizide tuttum. Girilen kelimenin harfi, tüm harflerin bulunduğu dizideki hangi indiste eşitse sayacın o indisinde bulunan değeri bir artırdım. Daha sonra sayac dizisini bobule short ile büyükten küçüğe doğru sıraladım. Bu sıralamayı yaparken tüm harflerin bulunduğu diziyi de buna göre sıralattırdım. Böyle olunca tüm harflerin bulunduğu dizideki 0. indise sayacı en büyük olan harf gelmiş oldu. Bu sayede buldum :)
Kodu paylaşabilirmisin peki ben yukarıda paylaştığımı geliştirmeye çalışıyorum ancak benimki pek içime sinmedi. Seninkini kullanabilirim.
 

steve78

Doçent
Katılım
20 Haziran 2012
Mesajlar
800
Reaksiyon puanı
48
Puanları
28
Kodu paylaşabilirmisin peki ben yukarıda paylaştığımı geliştirmeye çalışıyorum ancak benimki pek içime sinmedi. Seninkini kullanabilirim.
Ödevim olduğu için şu an paylaşamıyorum. Üzerinden biraz zaman geçsin düzenler paylaşırım :)
 
Üst