folder Tahribat.com Forumları
linefolder C - C++
linefolder C - Cümlenin Harf Histogramı



C - Cümlenin Harf Histogramı

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ZoRKaYa
    ZoRKaYa's avatar
    Kayıt Tarihi: 18/Eylül/2007
    Erkek

    Merhaba arkadaşlar. Soru Dennis Ritchie nin kitabında yazan bir sorudur. Aklıma şöyle bir çözüm geldi fakat başka çözümleri de görmek istiyorum :) 

    Soru: Size verilen bir cümledeki harfleri kaç kez geçtiğini yazan bir program yazın. Büyük - küçük harf farketmeyecek. 

    Örnek input:

    dEnemE YAPiyORUm ben burada

    output:

    A:3

    B:2

    D:2

    E:4

    I:1

    M:2

    N:2

    O:1

    P:1

    R:2

    U:2

    Y:2

    Bu da benim çözümüm:

    #include <stdio.h>

    #include <string.h>

    char a[250],b[250];

    int i;

    int main(){

        fgets(b,100,stdin);

        for (i=0;i<strlen(b);i++) {

            if (b[i]>=97){

                a[b[i]-32]+=1;

            } else if(b[i]==32)  {

                continue;

            } else {

                a[b[i]]+=1;

            }

        }

            for (i=0;i<250;i++) {

                if (a[i]!=0){

                    printf ("%c:%d \n", i, a[i]);

                }

            }

        return 0;

    }

     


    echo "imzanız özel karakter içermemelidir";
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YeniHarman
    YeniHarman's avatar
    Kayıt Tarihi: 17/Haziran/2012
    Erkek

    Alttaki de bu işin C++'cesi.

    // Girilen sözcükteki harf frekanslarını sayıyla ve çubuk grafiğiyle verir.
    // 2012 - YeniHarman
    
    #include <cstdlib>
    #include <iostream>
    #include <string>
    #include <cctype>
    #include <vector>
     
     
    using std::string;
    using std::cout;
    using std::cin;
    using std::endl;
    using std::vector;
     
    typedef vector<int> FTABLE;
     
    FTABLE * LetterFrequence(string &Str)
    {
        FTABLE * FTable = new FTABLE(27,0);
         
        for(int i = 0; i < Str.size(); ++i)
        {
            ++FTable->at ( (isalpha(Str[i]) ? (toupper(Str[i]) - 'A') : 26) );
        }
         
        return FTable;
    }
     
    void PrintFTable(FTABLE &ft)
    {
        FTABLE::iterator it;
         
        for(it = ft.begin(); it < ft.end() - 1; ++it)
        {
            static int i = 0;
            if (*it > 0)
            {
                cout << (char)(i + 'A') << ": " << *it << endl;
            }
            ++i;
        }  
        cout << "Harf olmayanlar: " << ft.back() << endl;  
    }
    void DrawFTable(FTABLE &ft)
    {
        FTABLE::iterator it;
         
        for(it = ft.begin(); it < ft.end() - 1; ++it)
        {
            static int i = 0;
            if (*it > 0)
            {
                cout << (char)(i + 'A') << '\t';
                for(int k = 0; k < *it ; ++k)
                {
                    cout << '-';
                }
                cout << endl;
            }
            ++i;
        }  
        cout << "Diger   ";
        for(int k = 0; k < *it ; ++k)
        {
            cout << '-';
        }
        cout << endl;
    }
     
    int main(int argc, char *argv[])
    {
        string str;
        cout << "Harf frekansinin ogrenilecegi sozcugu giriniz (Turkce karakterler olmadan): ";
        cin >> str;
        cin.ignore(255,'\n');
        
        FTABLE * FrekansTablosu = LetterFrequence(str);
        PrintFTable(*FrekansTablosu);
        DrawFTable(*FrekansTablosu);
         
        cout << "Press the enter key to continue ...";
        cin.get();
        return EXIT_SUCCESS;
    }

    Olaylara karışmayın!
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    manialith
    manialith's avatar
    Kayıt Tarihi: 01/Ocak/2009
    Erkek

    Türkçe karakterler için de yapmak mümkün mü bunu?


    Im Boned, All Boned.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ZoRKaYa
    ZoRKaYa's avatar
    Kayıt Tarihi: 18/Eylül/2007
    Erkek
    manialith bunu yazdı

    Türkçe karakterler için de yapmak mümkün mü bunu?

    Benim yazdığım kodda değil. ASCII kodları küçükle büyük harfler için ayarlı fakat türkçe karaterlerin ASCII kodları farklı. Ondan olmaz.


    echo "imzanız özel karakter içermemelidir";
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    ben de c# ile yaptım :)

     

         class Program
        {
            static void Main(string[] args)
            {
                Console.Write("Harf Frekanslarını Öğrenmek İstediğiniz Metni Girin: ");
                string metin = Console.ReadLine();
    
                Cozumle(metin); 
    
                Console.ReadKey();   
            }
    
            
            private static void Cozumle(string metin)
            {
                var yeniMetin = new String(metin.ToUpper().Where(Char.IsLetter).ToArray());
                SortedDictionary<char,int> harfler= new SortedDictionary<char, int>();
    
    
                foreach (char c in yeniMetin)
                {
                    
                    if(harfler.ContainsKey(c))
                        harfler[c] = Convert.ToInt32(harfler[c]) +1;
                    else
                        harfler.Add(c,1);
                }                        
                
              
                foreach (KeyValuePair<char, int> harfSayi in harfler)
                Console.WriteLine(String.Format("{0} : {1}",harfSayi.Key,harfSayi.Value));
                
            }                                                                             
        }

     

     

    Bu da ikinci versiyonu, çubuk grafikle :)

     

         class Program
        {
            static void Main(string[] args)
            {
                Console.Write("Harf Frekanslarını Öğrenmek İstediğiniz Metni Girin: ");
                string metin = Console.ReadLine();
    
                Cozumle(metin); 
    
                Console.ReadKey();   
            }
    
            
            private static void Cozumle(string metin)
            {
                var yeniMetin = new String(metin.ToUpper().Where(Char.IsLetter).ToArray());
                SortedDictionary<char,int> harfler= new SortedDictionary<char, int>();
    
    
                foreach (char c in yeniMetin)
                {
                    
                    if(harfler.ContainsKey(c))
                        harfler[c] = Convert.ToInt32(harfler[c]) + 1;
                    else
                        harfler.Add(c,1);
                }
    
    
                string tmpSeviye;
                foreach (KeyValuePair<char, int> harfSayi in harfler)
                {
    
                    tmpSeviye = "";
                    for (int i = 0; i < harfSayi.Value; i++)
                        tmpSeviye += "-";
                    
                    Console.WriteLine(String.Format("{0} : {1} \t {2}", harfSayi.Key, harfSayi.Value,tmpSeviye));
                }
    
            }                                                                             
        }
    unbalanced tarafından 09/Şub/13 04:28 tarihinde düzenlenmiştir

    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
Toplam Hit: 1818 Toplam Mesaj: 5