String Diziler(Katarlar)

Slides:



Advertisements
Benzer bir sunumlar
Dizi Kullanan Örnekler
Advertisements

STRİNG FONKSİYONLARI.
Fonksiyonlar.
Göstericiler (Pointers)
Bölüm 2 C Dilinin Temelleri
switch - case Yapısı Döngü Yapıları
String Diziler(Katarlar)
C Programlama Diline Giriş
STRING FONKSİYONLARI Tip Tanımları: char a; char ad[16]; char *ad;
Tanım ANSI C dizgisi (string) bir karakter dizisidir (array of characters) Örnek dizgi tanımları: #define UYARI_DIZGISI “Veri giris hatasi” #define DIZGI_BOYU.
Diziler.
Bölüm 2: Program Denetimi
Selçuk Üniversitesi’nin Bilişime Gönül Veren Gençleri
OOP4 LAB.
Elektrik-Elektronik Mühendisliği Bölümü DİZİLER C Programlama Dili Yaz Stajı Cengiz TEPE SAMSUN 2007.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Bölüm 9 Dizgiler Dizgi Tanımı Dizgi Girdi İşlemleri
Bölüm 9 Dizgiler Dizgi Tanımı Dizgi Girdi İşlemleri
String Kütüphanesindeki Arama Fonksiyonları
Diziler(Arrays).
Bölüm 10 Yapılar ve Birleşimler
String ve Karakterlerin Temelleri
Bölüm 2 C Dilinin Temelleri Genel Kavramlar
Soru1: Dışardan "%s" format belirteci kullanılarak girilecek 20 elemanlı bir dizinin elemanlarının kaç tanesinin rakam, kaç tanesinin harf ve kaç tanesinin.
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
DİZİLER.
Bilgisayar Programlama (Yrd. Doç. Dr. İbrahim ASRİ)
While Döngüsü Tekrarlama deyimidir. Bir küme ya da deyim while kullanılarak bir çok kez yinelenebilir. Yinelenmesi için koşul sınaması döngüye girilmeden.
İNTERNET PROGRAMCILIĞI I BTP 207 Ders 9. Tek değişkende birden fazla bilgi tutulmak istendiğinde kullanılır. Kullanım şekli: var dizi_adı= new Array(eleman1,
C ile Programlamaya Giriş
FONKSİYONLAR.
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
Algoritma & Programlama
Diziler (Arrays).
Temel Giriş/Çıkış Fonksiyonları
STRING‘LER Karakter Kütüphanesi Fonksiyonları
Dizgiler Dizgi Tanımı Dizgi Girdi İşlemleri Dizgi Çıktı İşlemleri Dizgi Fonksiyonları Karakter Fonksiyonları Gösterge Dizgileri.
1 Yapılandırılmamış programlama Prosedür/Fonksiyon gerekliliği Prosedural Programlama Fonksiyon Tanımlama/Prototip/Çağırma Örnek fonksiyonlar Fonksiyon.
2. HAFTA 2. Hafta.
Bölüm 3 Atama ve Girdi/Çıktı Komutları Bölüm 3 Atama ve Girdi/Çıktı Komutları Atama Komutu Operatörler İsim Sabitleri Veri Tipi Dönüşümü Çıktı Fonksiyonu.
BMS-301 Kabuk Programlama Güz 2015 (5. Sunu) (Yrd. Doç. Dr. Deniz Dal)
1 7. HAFTA. 2 Referanslar  Referanslar adres temsilcisidir  İşaretçilerin görevlerini kısmi olarak yapabilirler  Değişken değildirler.  Bellekte yer.
Fonksiyonlar.
SAYISAL ANALİZ Doç.Dr. Cüneyt BAYILMIŞ.
C Programlamada, benzer tipte tanımlaman değişkenleri kontrol etmede bize en çok yardım eden dostlarımız dizilerdir. Örneğin: 100 Öğrencinin bilgilerini.
Sıralama. Sıralama, bir dizideki sayısal elemanların küçükten büyüğe veya büyükten küçüğe, sayısal olmayan bir dizideki elemanların ise A’ dan Z’ ye.
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
Bölüm 2 C Dilinin Temelleri Genel Kavramlar Yazım ve Noktalama Kuralları C Kütüphaneleri C Dilindeki Sözcükler Değer Sabitleri Veri Tipleri Değişkenler.
Bilgisayar Programlama BIL 107
Fonksiyonlar ve Diziler
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
BİLGİSAYAR PROGRAMLAMA Ders 10: Dosyalama İşlemleri
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
C Sharp 9. hafta - dIZILER.
BÖLÜM 5 POINTER’LER (İŞARETÇİLER)
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
tanımları yapabilmeniz gerekmektedir .
C Programlama Yrd.Doç.Dr. Ziynet PAMUK BMM211-H12
Bölüm 9 Dizgiler Dizgi Tanımı Dizgi Girdi İşlemleri
Bölüm 2 C Dilinin Temelleri
PROGRAM KONTROL KOMUTLARI 1. if koşulu 2. if else koşulu
4. GİRİŞ/ÇIKIŞ DEYİMLERİ 4.1. Giriş
YAPISAL PROGRAMLAMA Hafta-7
Bölüm 2 C Dilinin Temelleri
C ile Programlamaya Giriş
MTM216 GÖRSEL PROGRAMLAMA
Diziler(Arrays).
Sunum transkripti:

String Diziler(Katarlar)

Giriş Katar bir char tipinde bildirilen karakter dizisidir. Stringler, içeriği harfler, rakamlar, veya bazı semboller olan text bilgilerini tutmak(saklamak) için kullanılır. C dilinde string bildirimi için bir tip deyimi yoktur. Bu yüzden, bir stringe bir dizi gözüyle bakılır. Genel olarak bir string'in bildirimi: char string_adı[eleman_sayısı]; şeklindedir. Örneğin 10 elemanlı bir isim bilgisi OgrenciAdi adlı bir string ile tutulmak istenirse: char OgrenciAdi[10]; şeklinde programın başında bildirilmelidir.

Stringlere Başlangıç Değeri Atama Diğer dizi bildirimlerinde olduğu gibi, karakter dizilerine başlangıç değeri verilebilir. Örneğin aşağıda verilen iki bildirim aynı anlamdadır: char ktr[5]={'a','h','m','e','t','\0'}; char ktr[5]="ahmet"; birinci satırdaki bildirimde '\0' (NULL) sembolü karakter dizisinin sonlandığını gösterir. sonlandırıcı karakter, karakter dizileri üzerinde işlemlerin hızlı ve etkin bir biçimde yapılabilmesine olanak sağlar. Eğer bir karakter dizisinin kaç elemandan oluşacağı belirtilmezse, başlangıçta bildirilen karakter sayısı kaç tane ise dizinin eleman sayı o kadar olduğu varsayılır. char ktr[]="ahmet"; /* 5 elemanlı */ Not: char ktr[]; tanımlaması yanlıştır. Stringler bazen bir pointer(işaretçi) ile gösterilebilir. char *ktr=“Ankara"; Yada char *ad; ad=“Ankara"; Kullanılabilir.

Stringlere Başlangıç Değeri Atama Elemanları string olan diziler tanımlamak mümkündür. Örneğin en uzunu 7 karakter olan 5 farklı isim bir çatı altında şöyle toplanabilir: char isim[5][8] = { "Semra", "Mustafa", "Ceyhun", "Asli", "Leyla" }; yada char isim[][8] = { "Semra", "Mustafa", "Ceyhun", "Asli", "Leyla" }; yada char *isim[5] = { "Semra", "Mustafa", "Ceyhun", "Asli", "Leyla" }; Bu tip tanımlamalarda birinci boyut (satır) dizinin eleman sayısını, ikinci boyut (sütun) her bir elemanın sahip olabileceği maksimum karakter sayısını gösterir.

Klavyeden okunan stringin ekrana yazılması Örnek-1 main(){ char ktr[20]; printf("\nBir seyler yazin:"); scanf("%s",ktr); printf("%s yazdiniz.",ktr); }

Bir stringin formatlı yazılması Bu örnekte ad stringi ekranda 10 karakterlik bir alana ve sağa dayalı olarak yazılacaktır. Eğer sola dayalı olarak yazdırılacaksa komutu şu şekilde yazılır. printf("%-10s",ad); Eğer srtringden daha az bir yere yazması için komut verilirse yine stringin tamamı yazdırılır. printf("%3",ad); Eğer srtringin bir kısmı yazdırılacaksa komut şu şekilde olmalıdır. printf("%10.2",ad); Bu komut sonucunda ekrana “ah” yazar. Örnek-2 main(){ char ad[5]="ahmet"; printf("%10s",ad); } Örnek-3 #include<stdio.h> char il[20]="Ankara",ilce[20]="Çankaya" printf("%10s%10s",il,ilce); getchar();

Puts ve Gets komutları Bu fonksiyonlar sadece stringler üzerinde işlem yapar. printf(); ve scanf(); fonksiyonları gibi klavyeden veri okuma/ekrana bilgi yazma amaçlı kullanılır. Gets ve Scanf Farkı: Scanf()fonksiyonu bir cümle alırken ilk boşluk gördüğünde veri almayı keser. Örneğin “Başkent Ankara” Cümlesini Scanf() ile alınırsa sadece “Başkent” kelimesini alır. Gets() fonksiyonu ise klavyeden Enter tuşuna basılana kadar bir cümleyi diziye aktarır. Puts ve Printf Farkı: printf(  ) fonksiyonunda alt satıra geçmek için ‘\n’ konulurken puts fonksiyonunda sonuna '\n' koymadan bir alt satıra geçer. Örnek-4 main(){ char ktr[20]; printf("\nBir seyler yazin: "); gets(ktr); puts(ktr); }

Karakter dizisinin boyutunu bulma (Strlen() fonksiyonu) Dizinin başlangıçtaki boyutuyla, içine girilen katar uzunluğu farklı olabilir. Örneğin dizi boyutu, 40 karakter olacak şekilde ayarlanmışken, dizi içinde sadece 7 karakterlik "Merhaba" kelimesi tutulabilir. Bu durumda, dizi boyutu 40 olmasına rağmen, katar boyutu yalnızca 7'dir. Katarların boyutunu saptamak için, boş karakter ( NULL Character ) işaretinin yani "\0" simgesinin konumuna bakılır. Her seferinde arama yapmaya gerek kalmasın diye strlen(  ) fonksiyonu geliştirilmiştir. strlen(  ) fonksiyonu; kendisine argüman olarak gönderilen bir katarın boyutunu geri döndürür. Aşağıdaki gibi kullanılmaktadır: #include<stdio.h> #include<string.h> Main() { printf( "Katar Uzunluğu: %d\n", strlen("Merhaba") ); } NOT: strlen() fonksiyonu string.h kütüphanesinde bulunur.

Klavyeden girilen bir cümlenin kelimelerini alt alta yazan program. Örnek: Klavyeden girilen bir cümlenin kelimelerini alt alta yazan program. #include<stdio.h> #include <string.h> main(){ char cumle[100]; int i; gets(cumle); for (i=0;i<strlen(cumle);i++) if (cumle[i]!=' ') printf("%c",cumle[i]); else printf("\n"); getchar(); }

Çalışma Sorusu-1: Klavyeden girilen bir stringin kaç kelimeden oluştuğunu bulan programı yazınız.

String Fonksiyonları

strcpy() ve strncpy() ile katar kopyalama strcpy(  ) fonksiyonu: Bir katarı, bir başka katara kopyalamak için kullanılır. Katarlar aynı boyutta olmak zorunda değildir. Kopyalanacak katar kaynak katardan küçük olsa bile kopyalama işlemi tam olarak yapılır. Kullanımı: strcpy(s1, s2) s1=hedef s2=kaynak Örnek: #include<stdio.h> #include<string.h> main() { char kaynak[40]="Merhaba Dünya"; char kopya[30]; strcpy( kopya, kaynak ); printf( "%s\n", kopya ); }

strcpy() ve strncpy() ile katar kopyalama strncpy(  ) fonksiyonu: Strcpy komutuyla aynı görevi görür. Fakat emsalinden farklı olarak, kaç karakterin kopyalanacağı belirtilir. Kullanımı: strcpy(s1, s2,sayı) s1=hedef s2=kaynak sayı=kaynaktan sol baştan kaç karakter alınacak Örnek: #include<stdio.h> #include<string.h> main() { char kaynak[40]="Merhaba Dünya"; char kopya[30]=""; strncpy( kopya, kaynak ,7); printf( "%s\n", kopya ); } İlk değer boş da olsa atanmak zorundadır. char kopya[30]; Şeklinde bırakılırsa hatalı sonuç verir. Ekrana Merhaba kelimesini yazar.

strcmp() ve strncmp() ile katar karşılaştırma strcmp(  ) fonksiyonu, kendisine verilen iki katarı birbiriyle karşılaştırır. Katarlar birbirine eşitse, geriye 0(sıfır) döner. Eğer ilk katar alfabetik olarak ikinciden büyükse, geriye pozitif değer döndürür. Şayet alfabetik sırada ikinci katar birinciden büyükse, geriye negatif değer dönmektedir. Kullanımı: sonuc= strcmp(s1,s2); sonuc; -1 ise: s2, s1 den büyük 1 ise: s1,s2 den büyük 0 ise=eşit dir.

Strcmp komutu örneği main(){ char ktr1[]=“Ayhan”, ktr2[]=“Aydın”; #include <string.h> main(){ char ktr1[]=“Ayhan”, ktr2[]=“Aydın”; int sonuc; sonuc = strcmp(ktr1,ktr2); printf(“%d\n”,sonuc); if(sonuc>0) puts(“Birinci ikinciden büyük"); else if(sonuc<0) puts(“İkinci birinciden küçük"); else puts(“eşit"); }

strncmp() ile katar karşılaştırma strncmp() fonksiyonu, kendisine verilen iki katarın başlangıçtan istenilen sayıda karakter birbiriyle karşılaştırır. Katarlar birbirine eşitse, geriye 0(sıfır) döner. Eğer ilk katar alfabetik olarak ikinciden büyükse, geriye pozitif değer döndürür. Şayet alfabetik sırada ikinci katar birinciden büyükse, geriye negatif değer dönmektedir. Kullanımı: sonuc= strncmp(s1,s2,sayi); sonuc; -1 ise: s2, s1 den büyük 1 ise: s1,s2 den büyük 0 ise=eşit dir. Sayı: sol baştan itibaren karşılaştırılacak karakter sayısı

Strncmp() komutu örneği #include <string.h> main(){ char ktr1[]=“Ayhan”, ktr2[]=“Aydın”; int sonuc; sonuc = strncmp(ktr1,ktr2,2); printf(“%d\n”,sonuc); if(sonuc>0) puts(“Birinci ikinciden büyük"); else if(sonuc<0) puts(“İkinci birinciden küçük"); else puts(“eşit"); }

strcat() ve strncat() ile katar birleştirme strcat() ve strncat() fonksiyonları, bir katarı bir başka katarla birleştirmeye yarar. strcat() kendisine verilen katarları tamamen birleştirirken, strncat() belirli bir eleman sayısına kadar birleştirir. Kullanımları strcat(hedef, kaynak); strncat(hedef, kaynak,sayı);

strcat() Örneği: #include<stdio.h> #include<string.h> main() { char ad[30], soyad[20]; char isim_soyad[50]=""; printf( "Ad ve soyadınızı giriniz> " ); scanf( "%s%s", ad, soyad ); // isim_soyad <-- ad strcat(isim_soyad, ad ); // isim_soyad <-- ad + " " strcat(isim_soyad," " ); strcat( isim_soyad, soyad ); // isim_soyad <-- ad + " " + soyad printf( "Tam İsim: %s\n", isim_soyad ); getchar(); } Eleman sayısı birleştirme yapılacak elemanların sayısından küçük olsa bile işlemi yapar.

strncat() Örneği: #include<stdio.h> #include<string.h> main() { char ad[30], soyad[20]; char isim_soyad[50]=""; printf( "Ad ve soyadınızı giriniz> " ); scanf( "%s%s", ad, soyad ); // isim_soyad <-- strncat(isim_soyad, ad ,3); // isim_soyad <-- ad + " " strcat(isim_soyad," " ); strncat( isim_soyad, soyad,3 ); // isim_soyad <-- ad’ın ilk 3 karakteri+ " " + soyad ‘ın ilk 3 karakteri printf( "Tam İsim: %s\n", isim_soyad ); getchar(); }

strstr() fonksiyonuyla katar içi arama yapma strstr() fonksiyonu bir katar içinde, bir başka katarı aramak için kullanılır. strstr() fonksiyonu, bir katar içinde aranılan bir katarı bulduğu takdirde bulduğu yerden sonraki katarı pointer değişkene yerleştirir. Eğer herhangi bir eşleşme olmazsa geriye bir sonuç dönmez ve pointer null olarak kalır. Kullanımı Pointer değişken=strstr(str1,str2) Str1=içinde arama yapılacak katar Str2=aranacak katar NOT: Pointer, hafızada başka bir adrese ait değeri tutan, başka bir adresi gösteren değişkene denir.

strstr() Örneği #include<stdio.h> #include<string.h> main() { char adres[] = "Anakara"; char ara[]="kar"; char *ptr; ptr = strstr( adres, ara ); if( ptr != NULL ) printf( "Var:%s",ptr ); else printf( "Eşleşme bulunamadı.\n" ); getchar(); }

strchr() ve strrchr() fonksiyonları strchr() ve strrchr() fonksiyonları, tıpkı strstr() gibi arama için kullanılır. Ancak strstr() fonksiyonu katar içinde bir başka katarı arayabilirken, strchr() ve strrchr() fonksiyonları katar içinde tek bir karakter aramak için kullanılır. strchr(), karakterin katar içindeki ilk konumunu gösterirken; strrchr() fonksiyonu, ilgili karakterin son kez geçtiği adresi verir.

strchr() ve strrchr() fonksiyonları #include<stdio.h> #include<string.h> main() { char adres[] = “Ankara"; char *ilk_nokta, *son_nokta; ilk_nokta = strchr( adres, ‘a' ); son_nokta = strrchr( adres, ‘a' ); if( ilk_nokta != NULL ) { printf( "Ilk gorundugu konum: %d\n", ilk_nokta - adres ); printf( "Son gorundugu konum: %d\n", son_nokta - adres ); } else printf( "Eşleşme bulunamadı.\n" ); }

atoi() ve atof() ile katar dönüşümü Verilen katarı, sayıya çevirmek için kullanılır. Eğer metin, bir tam sayıya ( int ) çevrilecekse, atoi() , virgüllü sayıya ( float ), çevrilecekse atof() fonksiyonu kullanılır. Her iki fonksiyon stdlib.h kütüphanesi içindedir. Bu fonksiyonlar kullanılırken, #include<stdlib.h> komutu program başlangıcına yazılmalıdır.

atoi() ve atof() ile katar dönüşümü #include<stdio.h> #include<stdlib.h> main() { char kok_iki[] = "1.414213"; char pi[] = "3.14"; char tam_bir_sayi[] = "156"; char yas[] = "18 yaşındayım"; printf( "%d\n", atoi( tam_bir_sayi ) ); printf( "%d\n", atoi( yas ) ); printf( "%f\n", atof( kok_iki ) ); printf( "%f\n", atof( pi ) ); printf("Örnek çarpım:%d",atoi(tam_bir_sayi)*atoi(yas)); getchar(); } Her iki fonksiyonda rakam harici bir şey görene kadar çalışır. Eğer nümerik ifadeler dışında bir karakter çıkarsa, fonksiyon o noktada çalışmayı keser.

Çalışma Soruları 2, 3 Soru 2: Kendisine verilen bir katarın boyutunu bulan programı yazınız. ( Çözüm için strlen() fonksiyonunu kullanmayınız. ) Soru 3: Tersinden de aynı şekilde okunabilen kelime, cümle veya mısraya 'palindrome' denmektedir. Adı palindrome( ) olan ve verilen katarın tersinin kendisine eşit olduğu durumda geriye 1; aksi hâlde 0 döndüren programı yazınız.

Çalışma Soruları 4 Aşağıdaki gibi çalışıp, çıktı üretebilecek programı oluşturunuz. Merhaba Dunya Nasilsin? abahreM aynuD ?nislisaN