Ders11: Stringler (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. 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ı */
Stringler bazen bir pointer ile gösterilebilir.
char *ktr="ahmet";
Her dört örnekteki ktr stringinin eleman sayısı 5 tir.
String Üzerinde İşlem Yapan Standart G/Ç Fonksiyonları
printf(); ve scanf();
Bu fonksiyonlar diğer tiplerde olduğu gibi formatlı okuma/yazma amaçlı kullanılır.
String formatı %s dir. Aşağıda verilen programları iyice inceleyin. Bu öenekler
basitten karmaşığa doğru sunulmuştur. Gerekli açıklamalar program üzerinde
gösterilmiştir.
Program 11.1 : Bir stringin ekrana yazılması1: main() 2: { 3: char ktr[20]="Ahmet"; 4: printf("%s",ktr); 5: }
Program 11.2 : iki stringin ekrana yazılması
1: main(){ 2: char *ileti = "Selam dostum"; 3: char isim[] ={'A','l','i','\0'}; 4: printf("%s %s",ileti,isim); 5: }
Program 11.3 : klavyeden okunan stringin ekrana yazılması
1: main(){ 2: char ktr[20]; 3: printf("\nBir seyler yazin:"); 4: scanf("%s",ktr); printf("%s yazdiniz.",ktr); 5: }
Program 11.4 : Bir stringin formatlı yazılması
1: main(){ 2: char ad[5]="ahmet"; 3: printf("%10s",ad); 4: }
Program 11.5 : Bir stringin printf ile yazılması
1: main(){ 2: char *isim = "ahmet"; 3: printf(isim); 4: }
Program 11.6 : bir stringin içindeki m karakterinin sayısını öğrenme
1: main(){ 2: char ktr[20]; 3: int i,sayac = 0; 4: printf("\nBir seyler yazin :"); 5: scanf("%s",ktr); 6: for(i=0;ktr[i];i++) 7: if( ktr[i]=='m' ) sayac++; 8: printf("yazilanlarin icinde %d tane m harfi var",sayac); 9: }
puts(); ve gets();
Bu fonksiyonlar sadece stringler üzerinde işlem yapar.
printf(); ve scanf(); fonksiyonları gibi klavyeden veri
okuma/ekrana bilgi yazma amaçlı kullanılır.
Program 11.7 : puts ve gets fonksiyonları1: main(){ 2: char ktr[20]; 3: printf("\nBir seyler yazin: "); 4: gets(ktr); puts(ktr); 5: }
Program 11.8 : bir siringin ilk karkareini yazdırma
1: main(){ 2: char ad[10],soyad[20]; 3: printf("ADI : "); 4: gets(ad); 5: printf("SOYADI : "); 6: gets(soyad); 7: printf("%c. %s",ad[0],soyad); 8: }
Program 11.9 : puts,gets ve malloc fonksiyonları
1: main(){ 2: char *ktr; 3: ktr = (char *) malloc(20); 4: printf("\nBir seyler yazin: "); 5: gets(ktr); 6: puts(ktr); 7: }
Program 11.10 : bir stringin kaç karkaterden oluştuğunu hesaplar
1: main(){ 2: char ktr[200]; 3: int i; 4: puts("Bir seyler yazin"); 5: gets(ktr); 6: for(i=0;ktr[i];i++); /* kosul ktr[i]!='\0' anlamindadir*/ 7: printf("yazilan %d harfdir",i); 8: }
Bazı String Fonksiyonları
Bu fonksiyonlar standart C dilinde iki stringi karşılaştırmak,
bir stringin içeriğini diğerine kopyalamak ve stringin uzunluğunu
bulmak vb işlemler için tanımlı fonksiyonlardır. Bu ve benzeri fonksiyonlar
kullanılırken string.h kütüphanesi programın başına ilave edilmelidir.
Burada sadece bunlardan bir kaçı Tablo 11.1 de verilmiştir.
str, str1 ve str2 birer string ve kr
bir karakter olmak üzere:
strcmp( str1,str2 ); | str1 ve str2 yi karşlaştırır |
strcpy( str1,str2 ); | str2 yi str1 e kopyalar |
strcat( str1,str2 ); | str2 yi str1 e ekler |
strrev( str ); | str yi ters çevirir |
strlen( str ); | str nin kaç karakterden oluştuğunu hesaplar |
strchr( str,kr ); | kr ile verilen karakterin str içindeki soldan itibaren yerini verir |
1: #include <string.h> 2: main(){ 3: char ktr1[10],ktr2[10]; 4: int sonuc; 5: printf("1. katar:");gets(ktr1); 6: printf("2. katar:");gets(ktr2); 7: sonuc = strcmp(ktr1,ktr2); 8: if(sonuc>0) puts("2. 1.den büyük"); 9: else if(sonuc<0 data-blogger-escaped-1.="" data-blogger-escaped-1.den="" data-blogger-escaped-10:="" data-blogger-escaped-11:="" data-blogger-escaped-e="" data-blogger-escaped-else="" data-blogger-escaped-it="" data-blogger-escaped-k="" data-blogger-escaped-puts="">
Program 11.12 : basit bir şifre programı
1: #include <string.h> 2: main(){ 3: char sifre[20]; 4: printf("SIFRE : "); 5: scanf("%s",sifre); 6: if( strcmp(sifre,"deneme")==0 ) 7: puts("sifre dogru girildi"); 8: else 9: puts("sifre yanlis!"); 10: }
Program 11.13 : Bir stringi diğerine kopyalama
1: #include <string.h> 2: main(){ 2: char *str1="ahmet", str2[10]; 4: /* once */ 5: puts(str2); 6: strcpy(str2,str1); 7: /* sonra */ 8: puts(str2); 9: }
Program 11.14 : bir stringi diğerine ekleme
1: #include <string.h> 2: main(){ 3: char *a="ahmet "; 4: char *b="bingul"; 5: strcat(a,b); 6: printf(a); 7: }
Program 11.15 : strinin uzunluğunu hesaplar
1: #include <string.h> 2: main(){ 3: char ktr[100]; 4: puts("Birseyler yazin:"); 5: gets(ktr); 6: printf("%s %d karakterden oluşmuştur.",ktr,strlen(ktr)); 7: }
Hiç yorum yok:
Yorum Gönder