String Kütüphanesindeki Arama Fonksiyonları

Slides:



Advertisements
Benzer bir sunumlar
Dizi Kullanan Örnekler
Advertisements

STRİNG FONKSİYONLARI.
Diziler.
Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama
Bölüm 12 ÜST DÜZEY KONULAR Dinamik Bellek Ayırma Önişlemci
Karar Verme: Eşitlik ve Karşılaştırma Operatörleri
Nöbetçi Kontrollü Döngü
Göstericiler (Pointers)
SINIFLAR Yılmaz Kılıçaslan.
Nesneye Yönelik Programlama
void medyan(int cevap[]) { int j; siralama(cevap);
Bölüm 2 C Dilinin Temelleri
switch - case Yapısı Döngü Yapıları
String Diziler(Katarlar)
STRING FONKSİYONLARI Tip Tanımları: char a; char ad[16]; char *ad;
Değişken Bildirimleri
Diziler.
Atama ve Girdi/Çıktı Komutları
Elektrik-Elektronik Mühendisliği Bölümü DİZİLER C Programlama Dili Yaz Stajı Cengiz TEPE SAMSUN 2007.
Soru1: kuvvet(taban,us) Şeklinde bir yinelenen fonksiyon yazın
Bölüm 9 Dizgiler Dizgi Tanımı Dizgi Girdi İşlemleri
Bölüm 9 Dizgiler Dizgi Tanımı Dizgi Girdi İşlemleri
Diziler(Arrays).
Bölüm 10 Yapılar ve Birleşimler
String ve Karakterlerin Temelleri
KOPYA YAPICI FONKSİYON, STATİK ELEMANLAR, ARKADAŞ SINIF VE FONKSİYONLAR, NESNE DİZİLERİ Yılmaz Kılıçaslan.
Bölüm 2 C Dilinin Temelleri Genel Kavramlar
SINIFLAR GİRİŞ Yılmaz Kılıçaslan.
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.
Soru1: Bir tanesi tam sayı diğeri string olan iki elemanlı bir struct’ı bir başka struct’a direk kopyalama, memcpy kullanarak kopyalama ve tek tek elemanlarını.
Fonksiyonlar.
SINIFLAR VE DİNAMİK BELLEK YÖNETİMİ
C++ Temelleri C++ genel amaçlı, nesne tabanlı, yüksek seviye programlama dilidir.
C ile Programlamaya Giriş
FONKSİYONLAR.
Bölüm 7 - Göstericiler İndeks 7.1 Giriş
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
Bilgisayar Programlama
Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler.
Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
Fonksiyonlar Fonksiyon Tanımı
Algoritma & Programlama
Diziler (Arrays).
JAVA’DA DİZİLER Dr.Galip AYDIN.
SINIFLAR VE DİNAMİK BELLEK YÖNETİMİ VE SINIFLARIN DİĞER ÖZELLİKLERİ Yılmaz Kılıçaslan.
Temel Giriş/Çıkış Fonksiyonları
Diziler. Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler.
Bilgisayar Programlama. Tek bir değişken tanımlamak için aşağıdaki gibi bir yazım yeterlidir. int i; Hatırlanacağı gibi bu tarz bir tanımlamada.
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
DİZİLER Arrays.
STRING‘LER Karakter Kütüphanesi Fonksiyonları
Dizgiler Dizgi Tanımı Dizgi Girdi İşlemleri Dizgi Çıktı İşlemleri Dizgi Fonksiyonları Karakter Fonksiyonları Gösterge Dizgileri.
Değerler ve Değişkenler
Örnek Adam asmaca oyununun programının yazılması.
BISON (YACC) (Yet Another Compiler Compiler)
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.
1 7. HAFTA. 2 Referanslar  Referanslar adres temsilcisidir  İşaretçilerin görevlerini kısmi olarak yapabilirler  Değişken değildirler.  Bellekte yer.
String Diziler(Katarlar)
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.
BİLGİSAYAR programlama II
1- x,y,z koordinatlarına girilen iki nokta arasındaki uzaklığı bulan programı yazın. Her nokta için point adında struct tanımlayın #include struct point.
Bölüm 3 Atama ve Girdi/Çıktı Komutları
Fonksiyonlar ve Diziler
C Programlama Dili Bilgisayar Mühendisliği.
C Programlama Yrd.Doç.Dr. Ziynet PAMUK BMM211-H11
Bölüm 9 Dizgiler Dizgi Tanımı Dizgi Girdi İşlemleri
YAPISAL PROGRAMLAMA Hafta-6
YAPISAL PROGRAMLAMA Hafta-7
Bölüm 3 Atama ve Girdi/Çıktı Komutları
Karakter dizi fonksiyonları
Sunum transkripti:

String Kütüphanesindeki Arama Fonksiyonları Not:String kütüphanesindeki fonksiyonları kullanırken,<string.h> öncü dosyasını eklemeyi unutmayın. Prototip Fonksiyon Tanımı char * strchr(const char *s,int c); c‘nin s stringi içindeki ilk konumunu belirler. Eğer c bulunursa, c‘yi gösteren bir gösterici döndürülür. Aksi takdirde NULL gösterici döndürülür. size_t strcspn(const char *s1,const char *s2); s1 stringinde, s2 stringi içindeki karakterlerden oluŞmayan ilk kısmı bulur ve bu kısmın uzunluğunu döndürür. size_t strspn(const char *s1,const char *s2); s1 stringi içinde, yalnızca s2 stringi içindeki karakterlerden oluŞan ilk kısmı bulur ve bu kısmın uzunluğunu döndürür. char *strpbrk(const char *s1,const char *s2); s2 içindeki herhangi bir karakterin, s1 stringi içinde yer aldığı ilk konumu bulur.Eğer s2 stringindeki bir karakter s1 içinde bulunursa,s1 içindeki karakteri gösteren bir gösterici döndürür. Aksi takdirde, NULL gösterici döndürür.

String Kütüphanesindeki Arama Fonksiyonları Prototip Fonksiyon Tanımı char *strrchr(const char *s,int c); s stringi içinde, c karakterinin en son konumunu belirler. Eğer c bulunursa, s stringi içindeki c ‘yi gösteren bir gösterici döndürülür. Aksi takdirde, NULL gösterici döndürülür. char *strstr(const char *s1,const char *s2); s2 stringi içinde, s1 dizisinin son konumun belirler. Eğer string bulunursa, s1 stringini gösteren bir gösterici döndürülür. Aksi takdirde, NULL gösterici döndürülür. char *strtok(const char *s1,const char *s2); Bir dizi strtok çağrısı s1 stringini,s2 içinde belirtilen karakterle ayrılmış atomlara (bir satırdaki kelimeler gibi mantıklı parçalara) ayırır. İlk çağrı ilk

#include <stdio.h> #include <string.h> #include <conio.h> int main() { const char *string = "Bu bir testtir"; char character[2] ={ 'a','t'}; int i; for(i=0;i<2;i++) if ( strchr( string, character[i] ) != NULL ) printf( "\'%c\' bu stringde bulundu." "\nHafizadaki konumu: %x \"%s\".\n", character[i], strchr( string, character[i] ),string ); else printf( "\'%c\' bu stringde bulunamadi \"%s\".\n", character[i], string ); } getch(); return 0; #include <stdio.h> #include <string.h> #include <conio.h> int main() { const char *string1 = "Deger 3.14159"; const char *string2 = "1234567890"; printf( "%s%s\n%s%s\n\n%s\n%s%u", "string1 = ", string1, "string2 = ", string2, "String1'in Strin2'den karakter icermeyen", "baslangic kismi uzunlugu = ", strcspn( string1, string2 ) ); getch(); return 0;}

#include <stdio.h> #include <string.h> #include <conio.h> int main() { const char *string1 = "Bu bir testtir"; const char *string2 = "dikkat"; printf( "\"\%s\"%s'%c%s\n\"%s\"%s\n", string2," stringinde gorulen", *strpbrk( string1, string2 ), " karakteri", string1,"de gorulen " "diger stringe ait " "ilk karaktedir." ); getch(); return 0; } #include <stdio.h> #include <string.h> #include <conio.h> int main() { const char *string1 = "Bir hayvanatbahcesi zebrayida" "iceren pek cok hayvana sahiptir"; int c = 'p'; printf( "%s\n'%c'%s\"%s\"\n", "string1'in son gorulen ",c, " karakterinden sonra geriye kalan kismi" , strrchr( string1, c ) ); getch(); return 0; }

#include <stdio.h> #include <string.h> #include <conio.h> int main() { const char *string1 = "abcdefabcdef"; const char *string2 = "def"; printf( "%s%s\n%s%s\n\n%s%s\n", "string1 = ", string1, "string2 = ", string2, "string1 icinde string2 karakterleri\n" "ile karsilasildigindan itibaren" " string1:", strstr( string1, string2 ) ); getch(); return 0; } #include <stdio.h> #include <string.h> #include <conio.h> int main() { char string[] = "Bu cumle 5 kelimeden olusur."; char *tokenPtr; printf( "%s\n%s\n\n%s\n", "Kelimelerine ayirilacak string:", string, "Kelimeler:" ); tokenPtr = strtok( string, " " ); while ( tokenPtr != NULL ) { printf( "%s\n", tokenPtr ); tokenPtr = strtok( NULL, " " ); } getch(); return 0;

String Kütüphanesindeki Hafıza Fonksiyonları Prototip Fonksiyon Tanımı void * memcpy(void *s1,const void *s2,size_t n); s2 ile gösterilen nesneden n karakteri s1 ile gösterilen nesneye kopyalar. Sonuçta, oluşan nesneyi gösteren bir gösterici döndürülür. void *memmove(void *s1,const void *s2,size_t n); s2 ile gösterilen nesneden n karakteri s1 ile gösterilen nesneye kopyalar. Kopyalama işlemi, s2 ile gösterilen nesnedeki karakterler önce geçici bir diziye kopyalanıp daha sonra da bu geçici diziden s1 ile gösterilen nesneye kopyalanıyormuş gibi yapılır. Sonuçta, oluşan nesneyi gösteren bir gösterici döndürülür. int memcmp(const void *s1,const void *s2,size_t n); s1 ve s2 ile gösterilen nesnelerin ilk n karakterlerini karşılattırır. Fonksiyon, s1 s2‘ye eşitse 0,s1 s2‘den küçükse 0‘dan küçük,s1 s2‘den büyükse 0‘dan büyük bir değer döndürür.

String Kütüphanesindeki Hafıza Fonksiyonları Prototip Fonksiyon Tanımı void *memchr(void *s,int c,size_t n); s ile gösterilen nesne içinde c ‘in (unsigned char‘a dönüĢtürülür) ilk bulunduğu konumu belirler. Eğer c bulunursa, nesne içindeki c ‘in konumunu gösteren bir gösterici döndürülür. Aksi takdirde, NULL döndürülür. void *memset(void *s,int c,size_t n); s ile gösterilen nesnenin ilk n karakterine, c(unsigned int‘e dönüştürülür) kopyalar. Sonucu gösteren bir gösterici döndürülür.

#include <stdio.h> #include <string.h> #include <conio.h> int main() { char x[] = "Evim evim guzel evim"; printf( "%s%s\n", "memmove'dan once x: ", x ); "memove'dan sonra x: ", memmove( x, &x[ 5 ], 15 ) ); getch(); return 0; } #include <stdio.h> #include <string.h> #include <conio.h> int main() { char s1[ 17 ], s2[] = "Stringi kopyala"; memcpy( s1, s2, 17 ); printf( "%s\n%s\"%s\"\n", "s2,s1'e kopyalandiktan sonra", "s1 = ", s1 ); getch(); return 0; }

#include <stdio.h> #include <string.h> #include <conio.h> int main() { const char *s = "String"; printf( "%s\'%c\'%s\"%s\"\n", "String'in ", 'r', " karakterinden sonra kalani" , memchr( s, 'r', 16 ) ); getch(); return 0; } #include <stdio.h> #include <string.h> #include <conio.h> int main() { char string1[ 15 ] = "BBBBBBBBBBBBBB"; printf( "string1 = %s\n", string1 ); printf( "memset'ten sonra string1 = %s\n", memset( string1, 'b', 7 ) ); getch(); return 0; }

#include <stdio.h> #include <string.h> #include <conio.h> int main() { char s1[] = "ABCDEFG", s2[] = "ABCDXYZ"; printf( "%s%s\n%s%s\n\n%s%2d\n%s%2d\n%s%2d\n", "s1 = ", s1, "s2 = ", s2, "memcmp( s1, s2, 4 ) = ", memcmp( s1, s2, 4 ), "memcmp( s1, s2, 7 ) = ", memcmp( s1, s2, 7 ), "memcmp( s2, s1, 7 ) = ", memcmp( s2, s1, 7 ) ); getch(); return 0; }

String Kütüphanesindeki Diğer Fonksiyonlar Prototip Fonksiyon Tanımı char *strerror(int errornum); Sisteme bağımlı olmak üzere, hata sayısını bir metin stringi haline dönüştürür. Stringi gösteren bir gösterici döndürülür. size_t strlen(const char *s); s stringinin uzunluğunu bulur. null karakterden önceki karakterlerin sayısı döndürülür.

#include <stdio.h> #include <string.h> #include <conio.h> int main() { printf( "%s\n", strerror( 2 ) ); getch(); return 0; } #include <stdio.h> #include <string.h> #include <conio.h> int main() { const char *string1 = "abcdefghijklmnopqrstuvwxyz"; const char *string2 = "dort"; const char *string3 = "Boston"; printf("\"%s\"%s %lu\n\"%s\"%s %lu\n\"%s\"%s %lu\n", string1, " uzunlugu", strlen( string1 ), string2, " uzunlugu", strlen( string2 ), string3, " uzunlugu", strlen( string3 ) ); getch(); return 0; }

Yapı(Struct) Tanımlamaları Yapılar Diğer tipte nesneler kullanılarak oluşturulan, türetilmiş veri tipleridir. struct kart{char *taraf; char *takim; }; struct anahtar kelimesi yapı tanımını başlatır. Kart tanıtıcısı yapı etiketidir.(structure fag) Yapı etiketleri, tanımına isim verir. Parantezler içinde bildirilen değişkenler yapı elemanlarıdır.

Yapı(Struct) Tanımlamaları struct isci{ char adi[20]; char soyadi[20]; int yas; char cinsiyet; double saatlikUcreti; }; struct isci2{ char adi[20]; char soyadi[20]; int yas; char cinsiyet; double saatlikUcreti; struct isci2 kisi; //hata x struct isci2 *ePtr; //gösterici √ }; Yukarıda ki yapıtanımlaması hafızada yer ayırmaz, bunun yerine değişkenler bildirmek için kullanılacak yeni bir veri tipi oluşturur. Yapı değişkenleri diğer tiplerdeki değişkenler gibi bildirilirler. struct kart a, deste[52], *cPtr; bildirimi, struct kart tipinde bir a değişkeni, struct kart tipinde 52 elemana sahip bir deste dizisi ve struct kart ‘ı gösteren bir gösterici değişkeni bildirir. Verilen bir yapı tipindeki değişkenler, değişken isimleri yapı tanımının sonundaki parantez ile yapı tanımlamasını sonlandıran noktalı virgül arasına, virgüllerle ayrılmış bir biçimde yazılarak bildirilebilir. struct kart{ char *taraf; char *takim; } a, deste[52], *cPtr;

Yapı(Struct) Tanımlamaları Yapılar, == ve != operatörleri kullanılarak karşılaştırılamaz çünkü yapı elemanları hafızada ardışık byte’lar içinde bulunmak zorunda değildir. Bazen yapılar içinde boşluklar olabilir çünkü bilgisayarlar belirli veri tiplerini özel sınırlar içerisinde depolarlar. Bu sınırlar, verileri bilgisayarda tutmak için kullanılan standart hafıza birimleri olarak düşünülebilir. Bu standart birim 1 byte(halfword) 2byte(word) veya 4 byte(double word) uzunluğunda olabilir. struct ornek{ char c; int i;} numune1,numune2; Bu yapı tanımlaması ile struct ornek tipinde iki değişken; numune1 ve numune2 bildirilmiştir. 2-byte sınırlar kullanan bir bilgisayar, struct ornek yapısının her elemanını bir sınıra hizalayabilir. Yani her elemanı bir sınırın başlangıcına yerleştirir. ( bu, her makinede değişebilir)

Yapılara İlk Değer Atama Yapılara, dizilerde olduğu gibi atama listeleri ile atama yapılır. Yapıya değer atamak için, yapı değişkeninin adından sonra eşittir işareti ve küme parantezleri içinde virgüllerle ayrılmış atama değerleri kullanılır. struct kart a={“İki”,”Kupa”}; bildirimi daha önceden tanımlanmış struct kart tipinde bir a değişkeni yaratır ve bu değişkenin taraf elemanına “İki”‖ ve takim elemanına “Kupa”‖ değerini atar. Eğer atama listesinde yapı elemanlarından daha az sayıda atama değeri varsa, kalan elemanlar otomatik olarak 0‘a (ya da eleman gösterici ise NULL‘a) atanır.

Yapı Elemanlarına Ulaşmak Yapı elemanlarına ulaşmak için iki operatör kullanılır. Yapı elemanı operatörü(.) printf(“%s”, a.takim); Yapı gösterici operatörü printf(“%s”, aPtr -> takim); aPtr-> takim deyimi, (*aPtr).takim ile eşdeğerdir. Burada parantezler gereklidir çünkü yapı elemanı operatörü ( . ), gösterici operatöründen (*) daha yüksek önceliğe sahiptir. Yapı gösterici operatörü ve yapı elemanı operatörü, parantez ve dizilerde kullanılan köşeli parantez operatörüyle ( [ ] ) birlikte en yüksek önceliğe sahiptir ve soldan sağa doğru işler.

#include <stdio.h> #include <conio.h> struct kart { char *taraf; char *takim; }; int main() { struct kart a; struct kart *aPtr; a.taraf = "As"; a.takim = "Maca"; aPtr = &a; printf( "%s %s%s\n%s %s%s\n%s %s%s\n", a.takim, a.taraf,"i", aPtr->takim, aPtr->taraf,"i", ( *aPtr ).takim, ( *aPtr ).taraf ,"i"); getch(); return 0; }

Yapıların Fonksiyonlarda Kullanılması Yapılar fonksiyonlara Yapı elemanlarının bağımsız bir şekilde geçirilmesiyle, tüm yapının geçirilmesiyle ya da yapıyı gösteren bir göstericinin geçirilmesiyle geçirilirler. Değere göre çağırma ile geçirilirler. Bu sebepten, çağırıcının yapı elemanları çağrılan fonksiyonla değiştirilemez.( Yapı elemanlarıda dahil) Bir yapıyı referansa göre çağırmak için yapı değişkeninin adresi geçirilir. Yapı dizileri, diğer tüm diziler gibi, otomatik olarak referansa göre geçirilir.

typedef typedef anahtar kelimesi, daha önceden tanımlanmış veri tipleri için eşanlamlı sözcükler (ya da takma isimler) yaratan bir mekanizma sağlar. Yapı tipi isimleri genellikle typedef ile tanımlanarak daha kısa tip isimleri oluşturulur. typedef struct kart Kart; ifadesi struct kard tipi ile eş anlamda kullanılan, Kart isminde yeni bir tip yaratır. C programcıları typedef anahtar kelimesini, yapı tipi tanımlarken kullanırlar böylece yapı etiketi kullanmaya gerek kalmaz. typedef struct{ char *taraf; char *takim; } Kart; tanımı, Kart yapı tipini ayrı bir typedef ifadesi kullanmaya gerek kalmadan yaratır. Artık Kart, struct kart tipinde değişkenler bildirmek için kullanılabilir. Kart deste[52]; bildirimi, 52 Kart yapısından (yani struct kart tipinde değişkenlerden) oluşan bir dizi bildirir. typedef ile yeni bir isim yaratmak yeni bir tip yaratmaz; typedef daha önceden var olan bir tip ismi için, eş anlamlı olarak kullanılabilecek yeni tip isimleri yaratır. Anlamlı bir isim, programın daha anlaşılır olmasını sağlar.

#include <stdio.h> #include <conio.h> int main() { struct complex { float real, imag; }; struct complex z1, z2, z3; printf("1. sayinin reel ve imajiner kisimlari gir "); scanf("%f %f", &z1.real, &z1.imag); printf("2. sayinin reel ve imajiner kisimlari gir "); scanf("%f %f", &z2.real, &z2.imag); z3.real = z1.real + z2.real; z3.imag = z1.imag + z2.imag; printf("%2.0f + %2.0fjn",z3.real, z3.imag); getch(); return 0; }

#include <stdio.h> #include <conio.h> #define OGRSAY 3 int main() { struct ogrenci{ char no[10]; int notu; }; struct ogrenci ogr[OGRSAY]; int i, j; float t, ort; for (i=0; i<OGRSAY; i++) { printf("%d. ogrencinin nosu ve notu : ", i+1); scanf("%s%d",ogr[i].no, &ogr[i].notu); } t = 0; for (i=0; i<OGRSAY; i++) t = t + ogr[i].notu; ort = t / OGRSAY; printf("--------------------------------------------\n"); printf("Ortalama = %f\n", ort); printf("Ortalamayi gecen ogrencilerin\nNosu\tNotu\n"); if (ogr[i].notu > ort) printf("%s\t%d\n", ogr[i].no, ogr[i].notu); getch(); return 0;

#include <stdio.h> #include <conio.h> typedef struct { float re, im; } complex; complex topla(complex, complex); complex cikart(complex, complex); complex carp(complex, complex); int main() { complex z1={1,1}, z2={2,2}; complex z3; printf("Karmasik Sayi 1:%3.0f %3.0f\n" "Karmasik Sayi 2:%3.0f %3.0f\n" ,z1.re,z1.im,z2.re,z2.im); printf("Toplama:\n"); z3 = topla(z1, z2); printf("%3.0f %3.0f\n",z3.re,z3.im); printf("Cikartma:\n"); z3 = cikart(z1, z2); printf("Carpma:\n"); z3 = carp(z1, z2); getch(); return 0; } complex topla(complex a, complex b) { complex z; z.re = a.re + b.re; z.im = a.im + b.im; return z; } complex cikart(complex a, complex b) z.re = a.re - b.re; z.im = a.im - b.im; complex carp(complex a, complex b) z.re = a.re * b.re - a.im * b.im; z.im = a.re * b.im + a.im * b.re;