Konular

C Programlamada String İşlemleri

Karakter Dizileri

C dilinde özel bir “karakter dizisi” tipi yoktur. Ancak karakter dizisi gerektiren durumlar için bazı kolaylıklar bulunmaktadır. Karakterlerden oluşan normal bir dizi veya bir karakter göstergesi bir karakter dizisi olarak düşünülebilir.

#include <stdio.h>

void main (void) {
   char *dd;
   dd = "dunya";
   printf("Merhaba, %sn", dd);
}

 

Bildiğiniz gibi, printf’in ilk argümanı bir karakter göstergesi olmalıdır; ikinci argüman da, %s dönüşüm tanımlamasının gerektirdiği şekilde bir karakter göstergesidir.

Yukarıdaki atama ifadesinde olduğu gibi, bir ifade içinde kullanılan bir karakter dizisi değişmezi bir karakter göstergesidir ve dizinin ilk karakterine işaret eder. Karakter dizisi, derleyici tarafından, bir tarafta saklanır. Böylece, yukarıdaki atama deyiminde sadece bir
gösterge ataması yapılmaktadır; bir karakter dizisi aktarması söz konusu değildir. Eğer bir karakter dizisi aktarması yapmak istiyorsak bunu kendimiz yapmalıyız. Örneğin,
 

char dd[10];
dd = "dunya";

 
geçersizdir, çünkü derleyici gösterge ataması yapmaya çalışacaktır. Ancak “=” işaretinin sol tarafında bir değişmez gösterge bulunduğundan, bu olanaksızdır. Karakterleri tek tek, bir döngü kullanarak, atamak zorundayız. Böyle işlemler çok sık kullanıldığı için, C kütüphanesi bazı karakter dizisi işleme fonksiyonları sağlamaktadır. Örneğin,
 

int main(int argc, char** argv) {

   char dd[10];
   //dd = "dunya"; Geçersiz İşlem
   strcpy(dd, "bir dizi");
   printf("Merhaba, %sn", dd);

    return (EXIT_SUCCESS);
}

 
bizim işimizi görecektir. Bu fonksiyon, ikinci argüman olarak geçirilen adresteki bütün karakterleri, en sonda gelen boş karakteri (?) ile birlikte, d tarafından gösterilen yere aktaracaktır. Bu durumda, bu 9 karakterdir. Bu fonksiyon, hedef dizinin bu kadar çok
karakteri alacak genişlikte olup olmadığını kontrol etmez. (Zaten edemez.)

Benzer bir durum karakter dizileri karşılaştırması yaparken ortaya çıkar.
 

if (s=="Bu dizi") ...

 
testi her zaman yanlış sonucunu verecektir. Kuşkusuz bunun nedeni gösterge eşitliğini test etmemizdir. s ya bir gösterge yada bir dizi ismi olabilir (her iki durumda da bir gösterge ifadesidir); değişmez karakter dizisi ise onu saklamak için kullanılan bellek öbeğinin başına işaret eden bir göstergedir.

Doğal olarak, bunlar farklı adreslerdir, böylece bu test hiçbir zaman “doğru” sonucunu vermeyecektir. Bunun yerine, s1 ve s2 şeklinde verilen iki karakter dizisini karşılaştırıp, sözlük sıralamasına göre s1’in s2’den küçük, s2’ye eşit veya s2’den büyük olmasına bağlı olarak, sırasıyla olumsuz bir tamsayı, sıfır veya olumlu bir tamsayı veren strcmp(s1,s2) fonksiyonunu kullanmalıyız.

Bu kısımda anlatılan fonksiyonların bildirimi string.h başlık dosyasında bulunmaktadır.

 

strcat(d,s) fonksiyonu s dizisini d’nin arkasına aktarır. Kuşkusuz d dizisinin hem eski hem de yeni karakter dizisini kapsayacak kadar geniş olması gerekir.

strlen(s) s karakter dizisinin uzunluğunu verir; bunu yaparken en sondaki boş karakteri saymaz.

strchr(s,c) c karakterinin s karakter dizisinin içinde ilk ortaya çıktığı yerin adresini bir karakter göstergesi olarak döndürür; c dizi içinde yoksa NULL verir.

strrchr(s,c) strchr(s,c) gibidir, sadece tarama işlemini sağdan sola doğru yapılır.

 

Yukarıdaki fonksiyonlardan bazıları için işlemi sınırlayan başka bir argüman, n, kabul eden bazı uyarlamalar bulunmaktadır.

strncmp(s1,s2,n) en fazla n karakteri karşılaştırır;

Örnek:

int main(int argc, char** argv) {

    char EH[1];
   
    Baslangic:
       
    printf("n Tekrar Etmek Icin E Basiniz ");
    scanf("%s", EH);
   
    if (strcmp(EH,"E")==0|| strcmp(EH,"e")==0){
          goto Baslangic;  
    }

    return (EXIT_SUCCESS);
}

 

strncat(s1,s2,n) en fazla n boş olmayan karakter ekler;
strncpy(s1,s2,n) tam olarak n karakter aktarır (eğer s2’nin uzunluğu daha kısa ise, boş karakterler eklenir).

 

Yararlı bir değer döndürmüyor gibi gözüken fonksiyonlar aslında karakter göstergesi döndürmektedir. Genelde, geri döndürülen gösterge hedef dizisinin başına işaret eder.

Diğer birçok fonksiyon yanında, C kütüphanesinde bazı veri dönüşüm fonksiyonları da mevcuttur. Bunlardan bazılarının bildirimi stdlib.h başlık dosyasında bulunmaktadır ve aşağıda açıklanmıştır. Ayrıca fonksiyon ve argüman tipleri de gösterilmiştir.

 

double atof(char *) karakter dizisi argümanını çift duyarlıklı kayan noktalı sayıya çevirir; hata durumunda 0.0 döndürür.

int atoi(char *) karakter dizisi argümanını tamsayıya çevirir; hata durumunda 0 döndürür.

long atol(char *) karakter dizisi argümanını uzun tamsayıya çevirir; hata durumunda 0L döndürür.

char * itoa(int, char *, int) ilk tamsayı argümanını karakter dizisine çevirir, sonucu ikinci argüman olarak verilen adrese koyar; üçüncü argüman tabanı belirtir.

char * ltoa(long, char *, int) ilk uzun tamsayı argümanını karakter dizisine çevirir, sonucu ikinci argüman olarak verilen adrese koyar; üçüncü argüman tabanı belirtir.

int toupper(int) ve int tolower(int) sırasıyla karakter argümanının büyük harf ve küçük harf karşılığını döndürür.

 

String Fonksiyon:

const char* tekcift() {

    int Sayi;

    printf("Sayiyi Giriniz: ");
    scanf("%d", &Sayi);


    if (Sayi % 2 == 0) {
        return "Sayi Cifttir";
    }
    else return "Sayi Tektir";
}

 

 Karşılaştırma İşlemleri

int main(int argc, char** argv) {

    char ch;
    char str[100];
    printf("Enter any character n");
    scanf("%c", &ch);
   
    printf("Entered character is %c n", ch);
   
    printf("Enter any string(upto 100 character) n");
    scanf("%s", &str);

    printf("Entered string is %s n", str);
   
    if(ch=='e'){
        printf("evet");
    }
   
    if(strcmp(str, "test")==0){
        printf("test");
    }

    return (EXIT_SUCCESS);
}

 

Yorumunuzu Ekleyin

C Programlama Dilinde Değişkenler

Değişkenler bir programlama dilinin en önemli bileşenlerindendir. En basit bir aritmetik işlemin bile kullanıcının girdiği değerleri saklamak için çeşitlik bellek alanlarına ihtiyacı vardır. İşte değişkenler bu bellek adreslerine verilen isimlerdir.

11,298 Okunma 1 Yorum 12/05/2015 00:26:24 22/05/2015 19:41:38

#define Ve #include Önişlemci Tanımlamaları

Hemen bütün C derleyicileri, özel önişlemci emirlerini tanıyan bir önişlemciyi yapılarında bulundururlar.

10,217 Okunma Henüz yorum yapılmamış 22/05/2015 19:27:09 29/05/2015 14:10:10

C Programlama printf() Fonksiyonu

Standart C kütüphanesinin bir parçası olan printf() C Programlama Dili'nin genel amaçlı çıktı alma fonksiyonudur.

9,047 Okunma Henüz yorum yapılmamış 22/05/2015 18:53:57 03/06/2015 15:57:27

DEV C++ Kurulumu

C çalışmak için bir editöre ve Derleyiciye ihtiyacınız var. Belkide en kolay çözüm DEV C++ kullanmak. Çünkü ücretsiz ve GNU lisansı ile dağıılmakta ve Mingw/GCC derleyiciside içerisinde bulunmaktadır.

8,972 Okunma Henüz yorum yapılmamış 12/05/2015 14:32:18 12/05/2015 14:33:21

C Diline Giriş

Blok Yapısı, Açıklamalar, Boşluklar, Kapsam

8,353 Okunma Henüz yorum yapılmamış 15/05/2015 19:07:26 29/05/2015 14:03:24

C Fonksiyon Yapısı

7,987 Okunma Henüz yorum yapılmamış 17/06/2015 18:31:11 17/06/2015 18:46:12

Tip Dönüşümleri

7,689 Okunma Henüz yorum yapılmamış 22/05/2015 17:39:09 29/05/2015 17:50:06

Operatörler

C programlamada toplama, çıkarma, çarpma, mod alma operatörleri

7,546 Okunma Henüz yorum yapılmamış 29/05/2015 16:49:24 29/05/2015 16:49:35

Yükleniyor...