27 Aralık 2013 Cuma

Stringler (Katarlar) - Ders11

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:
Tablo 11.1 : string.h kütüphanesine ait, bazı string fonksiyonları
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
Program 11.11 : İki stringin karşılaştırılması
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