Şimdi Ara

Fonksiyon kullanmadan harf sayma- C

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
5 Misafir (1 Mobil) - 4 Masaüstü1 Mobil
5 sn
7
Cevap
0
Favori
703
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhaba arkadaşlar
    Cde strlen fonksiyonunu kullanmadan kelimedeki harfi saymaya çalışıyorum. şöyle bir kod yazdım fakat ekrana görüntü gelmiyor.

    #include <stdio.h> 




    int main()
    {

    char isim[]="Tony";
    int say(char isim[]);
    {

    int i=0;
    while(isim!=0)
    {
    i++;
    }
    return i;
    }

    printf("%s kelimesi %d harften olusur",isim,say(isim));

    }



    < Bu mesaj bu kişi tarafından değiştirildi Tony Stark -- 24 Temmuz 2015; 21:49:37 >



  • Tony Stark kullanıcısına yanıt
    #include <stdio.h>


    int say(char isim[])
    {
    int CharacterCount = 0; /* Aşşağıdaki döngünün dizaynına göre hem indeks tutabilecek hem de karakter sayısını içerebilecek değişken */

    while(1) /* sonsuz döngü */
    {
    char CurrentChar = isim[CharacterCount]; /* şu an incelemeye alınan karakter... diziye indeks değişkeni olan "CurrentChar" değişkeni ile erişim sağlıyoruz*/

    if (CurrentChar == '\0') break; /* tüm C tipi stringler '\0' karakteri ile biter, o karaktere rastlayınca sonsuz döngüden çıkıyoruz */

    CharacterCount++; /* indeksi bir arttırır */
    }

    return CharacterCount;
    }

    int main()
    {
    char isim[] = "Tony Montana"; /* bu örnekte dikkat ederseniz boşluk karakterini de karakter olarak sayıyor */

    const int karaktersayisi = say(isim);
    const int hafizaboyutu = karaktersayisi + 1;

    printf("<%s> karakter dizisi %d karakterden olusur. Hafizada toplam %d byte yer tutar. %d. karakter ise hafizada kelime dizisinin bittigini simgeleyen \\0 degerli karakterdir.",isim,karaktersayisi, hafizaboyutu, hafizaboyutu );

    printf ( "\n" ); /* yeni satira gec komutu */
    printf ( "\n" );

    printf ( "Fakat siz yine de stringlerin uzunlugunu bu yontemle olcmeyin. Artik neredeyse tum isletim sistemlerinde her karakter icin 1 byte degilde 2 byte hafiza ayrilan Unicode, WideChar gibi karakter setleri kullaniliyor... Bunlar eskide kaldi." );

    getchar(); /* Bu fonksiyon program cikisinda ENTER'a basilmasini bekler*/

    return 0;
    }




  • @Buzz Lightyear Hocam sağolun çok güzel anlatmışsınız aslında sormak istediğim '\0' bu kısımdı, orayı koyunca çalıştı kodum.
    Hocam bir sorum daha olacak, C yi başlangıç düzeyinde bitirdim, şimdi yeniden başladım derslere. Sizce bir kitap almalı mıyım? İnternetten çalışıyorum. Ya da ileri düzeye gitmek için ne yapmalıyım, mesela birileri ödev verse onu yapmak için uğraşırım fakat şuan yine basit düzeyde yazıyorum.
  • Tony Stark kullanıcısına yanıt
    Yani nasıl rahat ediyorsanız öyle yapmaya devam edin bence.

    İleri düzeye gidebilmek için de İngilizce bilmiyorsanız muhakkak önce ingilizce öğrenin derim.
    2. olarak da, ileri düzeye gidebilmek için bence C++ bilmek şart.

    Şimdi C++ dilinin C alt kümesini içeren kısmını bildiğiniz müddetçe en küçüğünden en büyüğüne her türlü programı yazmanız teorik olarak mümkün.

    Fakat pratik olarak, büyük programları daha kolay yazabilmek için, C++'ın program dizaynı hususunda programcıya sunduğu class'lar, referanslar, template konusu ve inheritance/miras konularını gereğince bilerek uygulayabilmek gerekir diye düşünüyorum. Bunlar sayesinde hem programları gerektiğinde değiştirilebilecek ayrı modüller şeklinde yazabilmek mümkün olduğu gibi hem de oluşabilecek hataların sayısı ve onları bertaraf edebilmek de bunun sayesinde daha kolay olacaktır.




  • quote:

    Orijinalden alıntı: Buzz Lightyear

    #include <stdio.h>


    int say(char isim[])
    {
    int CharacterCount = 0; /* Aşşağıdaki döngünün dizaynına göre hem indeks tutabilecek hem de karakter sayısını içerebilecek değişken */

    while(1) /* sonsuz döngü */
    {
    char CurrentChar = isim[CharacterCount]; /* şu an incelemeye alınan karakter... diziye indeks değişkeni olan "CurrentChar" değişkeni ile erişim sağlıyoruz*/

    if (CurrentChar == '\0') break; /* tüm C tipi stringler '\0' karakteri ile biter, o karaktere rastlayınca sonsuz döngüden çıkıyoruz */

    CharacterCount++; /* indeksi bir arttırır */
    }

    return CharacterCount;
    }

    int main()
    {
    char isim[] = "Tony Montana"; /* bu örnekte dikkat ederseniz boşluk karakterini de karakter olarak sayıyor */

    const int karaktersayisi = say(isim);
    const int hafizaboyutu = karaktersayisi + 1;

    printf("<%s> karakter dizisi %d karakterden olusur. Hafizada toplam %d byte yer tutar. %d. karakter ise hafizada kelime dizisinin bittigini simgeleyen \\0 degerli karakterdir.",isim,karaktersayisi, hafizaboyutu, hafizaboyutu );

    printf ( "\n" ); /* yeni satira gec komutu */
    printf ( "\n" );

    printf ( "Fakat siz yine de stringlerin uzunlugunu bu yontemle olcmeyin. Artik neredeyse tum isletim sistemlerinde her karakter icin 1 byte degilde 2 byte hafiza ayrilan Unicode, WideChar gibi karakter setleri kullaniliyor... Bunlar eskide kaldi." );

    getchar(); /* Bu fonksiyon program cikisinda ENTER'a basilmasini bekler*/

    return 0;
    }


    Kodu kopyala/yapistir yaptiniz sanirim? Eger yaptiysaniz, lutfen yanlis buldugunuz kisimlari belirtin veya duzeltin ki iyi kodlama yazsin gorenler, misal while(1) kismi biraz sacma olmus, onun yerine for(char CurrentChar = isim[CharacterCount]; CurrentChar != '\0'; CharacterCount++) {} gibi tek satirlik cozumler bence daha iyi (ozellikle profesyonel anlamda programlamak icin).




  • ThisisaNightmare T kullanıcısına yanıt
    Evet haklısınız çok teşekkürler.
  • char* \0 ile biter wchar_t* \0\0 ile biter insanları tam bilgilendirelim lütfen

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Yapay Zeka’dan İlgili Konular
    Excel de aynı harfleri silme
    10 yıl önce açıldı
    C'de Harf Piramiti
    14 yıl önce açıldı
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.