BİLİŞİM - BİLGİSAYAR - EĞİTİM
  Karakter İşleme
 

6.   Karakter işleme:

Birçok program sayıların yanı sıra metinler üzerine işlem yapar. İlk akla gelen bir kelime işlem programıdır. Bu tür bir programda metinlerle ilgili olarak, araya karakter girme, silme, değiştirme ve arama gibi işlemler tanımlıdır. C dilindeki char  tipi bu tür verilerin saklanması için kullanılır.

 

6.1 Tanımlamalar ve Kullanım:

  karakter: Bilgisayarda tanımlı herhangi bir karakteri gösterir. Karakter sabitler tek tırnak içinde belirtilir.

                'A',  '0'

                '65'     :   işaretinin ardından belirtilen ASCII kodlu karakter

                C dili karakterleri ayrıca int değer gibi de görür. 'A' karakteri sayısal olarak A harfinin ASCII                            tablosundaki karşılığı olan 65 olarakta yorumlanabilir.

dizgi (string): Bir dizi karakterden oluşur. '' karakteri dizginin sonunu gösterir.Dizgi sabitler çift tırnak içinde gösterilir.

                "ALİ",   "Bir sayı girin"

                  Bu idafede dil karakterini otomatik koyar.

Karakter ile dizgi birbirinden farklı şeylerdir. Dizginin sonunda herzaman karakteri vardır.

'A' ile "A" birbirinin aynısı değildir. 'A' karakterini gösteren 65 değerinde bellekte int olarak salanırken "A" ise bir dizgi olup A ve karakterlerini içerir.

 

Tanımlama biçimi:

 

1. Dizi şeklinde tanımlama

 

char a[7] = {'K','O',,'C','A','E','L','İ'};

char a[8] = "KOCAELİ";           /* Son eleman olrak karakteri eklendiği için  eleman sayısını bir fazla belirtmeli */                                                                    2. İşaretçi olarak tanımlama

char *değişken;

char *a;

 

Doğrudan Değer Atama

 

char a[20];

char *b;

a[0] = 'A';    /* dizinin bir elemanına değer verir gibi ve tek tırnak içinde ( karakter sabiti) */

                       karakteri ayrıca belirtilmelidir.

 

 

Dizi biçiminde tanımlı dizgiye sabir bir dizgi atarma için strcpy işlevi kullanılır.

 

strcpy(char *hedef, const char *kaynak);   kaynak bilgisini hedef değişkenine kopyalar  (string.h)

                                                                Hedef dizgisinde kaynak dizgisini içerecek kadar yer olmalıdır.

strcpy(a, "ALİ");

b = "ALİ";   /* çift tırnak içinde atanacak değer . karakteri otomatik eklenir */

 

Değerini Yazdırma

 

printf("%s", a);

puts(a);                 sonu ile biten karakter dizisini ekrana yazar ve imleçi alt satıra geçirir         ( stdio.h )

 

Klavyeden Değer Atama

 

scanf("%s", a);          /* Boşluk karakterine kadar okuma yapacağı için içerisinde bu karakterin geçmesi olası                                                        girişlerde doğru çalışmaz. Adres operatörü kullanılmıyor */

gets(a) ;           Satır sonu karakterine kadar (ENTER tuşu) basılan karakterleri okur ( stdio.h )

 

Karakter Dizisinin Herhangi Bir Karakterine Erişme

Dizilerde olduğu gibi erişilmek istenen karakterin indisi bildirilir.

 

a[2] = 'G';    b[2] = 'G';

a[4] = ''; 

printf("%c ", b[3]);            /*  b'nin 4. elemanını yazar */

 

Örnek 6.1.1 : Girilen bir metnin uzunluğunu veren programı yazınız.

 

#include <stdio.h>

main()

{

  char *s;

  int i;

  gets(s);

  i = 0;                                                                                   for (i=0; s[i]!=''; i++)

  while (s[i]!='')                                                                                   {}                            /* boş işlem */

    i++;

  printf("Uzunluk %d n", i);

}

strlen ( char *) : Gönderilen değerin uzunluğunu verir. (string.h)

 

Örnek 6.1.2: Girilen bir metni tersten yazdıran programı yazınız.

 

#include <string.h>

#include <stdio.h>

main()

{

  char *s;

  int i;

  gets(s);

  for (i=strlen(s)-1; i>=0; i--)

       printf("%c", s[i]);

  printf("n");

}

 

Örnek 6.1.3 : Girilen cümleyi oluşturan kelimelerin sadece ilk harflerini yazdıran program.

 

1. c = sıradaki karakteri oku

2. Eğer  c boşluk ise 4. adıma git

3. Hiç karakter yazılmaış ise c'yi yaz.

4. Eğer son karakter ise dur aksi halde bir sonraki karakteri göster ve 1.adıma git.

 

Yukarıdaki algoritmada çözümün en önemli noktası herhangi bir kelimenin ilk karakterinin yazılıp yazılmadığıdır. Bunun izlenmesi için bir değişken kullanalım.

 

/* Girilen cümlenin ilk harflerini yaz */

main()

{

  int i;

  int yaz; /* 1/0 -> karakteri yaz/yazma */

  char *s;

clrscr();

gets(s);

  yaz = 1;

  for (i = 0; i<strlen(s); i++)

      if (s[i] == ' ')

yaz = 1;

      else

         if (yaz) {

            printf("%c", s[i]);

            yaz = 0;

         }

}

 

Örnek 6.1.4: Girilen cümleyi, kelimeleri bozmadan tersten yazdıran program.

 

                Ali zil çaldı --> çaldı zil Ali

 

İki Dizginin Karşılaştırılması

C dilinde diziler doğrudan karşılaştırılamazlar. Her bir elemanını ayrı ayrı karşılaştırılmalıdır. Küçüklük-büyüklük bilgisi ASCII tabloda önce-sonra bulunma bilgisine özdeştir. Karşılaştırma  amacıyla  strcmp(dizgi1, dizgi2)

 

işlevi kullanılır. İşlev üç değer alır.

 

<0  ise dizgi1 < dizgi2

 =0 ise dizgi1 = dizgi2

 >0 ise dizgi1 > dizgi2

 

Örnek  6.1.5:

 

int main()

 { char *s1 = "aaa",  *s2 = "aba;

    int i;

    i = strcmp(s1, s2);

    if (i > 0)

       printf("s1 büyük n");

    else if (i<0)

       printf("s2 büyükn");

    else

       printf("eşitlern");

 }

İki Dizgiyi Toplama (ekleme)

Dizgiler ile ilgili diğer sık kullanılan işlev strcat(hedef, kaynak) tir. kaynak dizgisini hedeh dizgisine ekler.

Hedef dizgisinde kaynak dizgisini içerecek kadar yer olmalıdır.

int main()

 {

    char *s1 = "aaa   ",  *s2 = "bbb";

    int i;

    strcat(s1, s2);              /* (string.h) */

    printf("%sn", s1);

 }

 
 
  Bugün 118 ziyaretçi (174 klik) www.bilisim-egitim.tr.gg  
 
Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol