Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

STRİNG FONKSİYONLARI.

Benzer bir sunumlar


... konulu sunumlar: "STRİNG FONKSİYONLARI."— Sunum transkripti:

1 STRİNG FONKSİYONLARI

2 String Stringler, char tipinde bildirilen karakter dizileridir ve harfler, rakamlar, veya bazı sembollerden oluşurlar. Genel olarak bir string bildirimi: char string_adı[eleman_sayısı];yada char *string_adı;şeklinde yapılır.

3 Scanf ve Printf printf() ve scanf() fonksiyonları diğer tiplerde olduğu gibi formatlı okuma/yazma amaçlı kullanılır.String formatı %s dir. Genellikle bir döngü içersinde, her dizi elemanı için scanf(  ) veya printf(  ) fonksiyonunu çağırmamız gerekiyordu. String için böyle bir mecburiyet bulunmuyor. Tek bir kelimeyi, tek bir scanf(  ) fonksiyonuyla okutabilir ve elemanlara otomatik değer atayabilirsiniz.

4 Gets ve Puts puts() fonksiyonu bir karakter dizisini ekrana yazdırmak için kullanılır. Bu fonksiyon diziyi ekrana yazdırdıktan sonra imleci bir sonraki satıra geçirir. char *str = "Hangi cilgin bana zincir vuracakmis sasarim"; ... puts(str); gets(  ) isminden anlayacağınız ( get string ) gibi stringe değer atamak için kullanılır. gets(  ) atayacağı değerin ayrımını yapabilmek için '\n' aramaktadır. Yani klavyeden Enter'a basılana kadar girilen her şeyi, tek bir stringe atayacaktır.

5 Karakter Dizisi Diziler sadece sayısal değişkenlerde ve sayısal işlemlerde kullanılmazlar.Bir çok kez cümle vb. yapılarda aslında karakter dizileri kullanırız. Karakter dizileri normal bir dizi tanımlanıyormuş gibi tanımlanır sadece tür değimi char olarak seçilir. Bu karakter dizeleri ile ilgili bir takım işlemleri gerçekleştirmek için gerekli olabilecek fonksiyonlar "string.h" kütüphanesi içerisindedir. Eğer bir karakter dizisinin eleman sayısı belirtilmezse, başlangıçta bildirilen karakter sayısı kaç tane ise dizinin eleman sayısı o kadar olduğu varsayılır.

6 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 s[5]={'I','z','m','i','r','\0'}; char s[5]="Izmir"; Birinci satırdaki bildirimde '\0' (NULL) sonlandırıcı karakter dizisinin sonlandığını gösterir.Sonlandırıcı karakter, karakter dizileri üzerinde işlemlerin hızlı ve etkin bir biçimde yapılabilmesine olanak sağlar.

7 Dizgi Bir dizi karakterden oluşur. '\0' karakteri dizginin sonunu gösterir.Dizgi sabitler çift tırnak içinde gösterilir. Bu ifadede dil \0 karakterini otomatik koyar. "ALİ", "Bir sayı girin" Karakter ile dizgi birbirinden farklı şeylerdir. Dizginin sonunda her zaman \0 karakteri vardır.'A' ile "A" birbirinin aynısı değildir. 'A' karakterini gösteren 65 değerinde bellekte int olarak saklanırken "A" ise bir dizgi olup A ve \0 karakterlerini içerir.

8 Tanımlama Biçimleri Dizi şeklinde tanımlama
char a[7] = {'K','O',,'C','A','E','L','İ'}; char a[8] = "KOCAELİ"; /* Son eleman olrak \0 karakteri eklendiği için eleman sayısını bir fazla belirtmeli */

9 İşaretçi olarak tanımlama
char *değişken; char *a; Değerini Yazdırma printf("%s", a); puts(a);

10 Değer Atama Tek bir kelimeyi, tek bir scanf(  ) fonksiyonuyla okutabilir ve elemanlara otomatik değer atayabilirsiniz. Yani "Merhaba" şeklinde bir girdi-input gelirse, 3.dizi elemanı 'r' olurken; 6.dizi elemanı 'b' olur. Önceki dizilerde gördüğümüzün aksine, eleman atamaları kendiliğinden gerçekleşir. Stringlere değer atarken ya da stringlerden değer okurken, sadece string adını yazmanız yeterlidir. Yani scanf(  ) fonksiyonu içersine & işareti koymamız gerekmiyor. Çünkü scanf(  ), stringin ilk adresinden başlayarak aşağıya doğru harfleri tek tek ataması gerektiğini biliyor. 

11 char a[20]; char *b; a[0] = 'A';
/* dizinin bir elemanına değer verir gibi ve tek tırnak içinde ( karakter sabiti) */ \0 karakteri ayrıca belirtilmelidir.

12 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] = '\0'; printf("%c ", b[3]); /* b'nin 4. elemanını yazar */

13 string.h kütüphanesine ait bazı fonksiyonlar
int strcmp(char *str1,char *str2);str1 ve str2 yi karşlaştırır.  Eşitse 0, str1 büyükse 0'dan büyük bir değer aksi halde 0'dan küçük bir değer göderir. char *strcpy(char *str1, char*str2);str2 yi str1 e kopyalar. char *strcat(char *str1,char *str2);str2 yi str1 e ekler.

14 char *strrev(str);str yi ters çevirir.
int strlen(str);str nin kaç karakterden oluştuğunu hesaplar. char *strstr(char *str1,char *str2);str2 katarının str1 içindeki (baştan itibaren) ilk karşılaştığı yeri verir. char *strlwr(char *str);str nin bütün karakterini küçük harfe çevirir. char *strupr(char *str);str nin bütün karakterini büyük harfe çevirir.

15 Örnekler #include <stdio.h> int main() { int i; char kelime[3];
kelime[0]= 'a'; kelime[1]= 'b'; kelima[2]= 'c';    for(i=0;i<3; i++) { printf("index %d : %c", i,kelime[i]); } return 0; } 

16 Buradaki örneğimizde öncelikle 3 boyutunda bir string tanımladık.
Ardından sırayla stringin elemanlarını doldurduk. Son olarakta bunları bir döngüyle kullanıcıya geri bastırdık.  

17 Stringleri bu şekilde karakter karakter doldurmak çok yorucu bir iş.
Bunun yerine biz gets() fonksiyonunu kullanacağız. Şimdiki örneğimizi gets fonksiyonu kullanarak yapalım.

18 #include <stdio.h>
#include <string.h>  main() { int i; char kelime[100];  printf("Bir kelime giriniz\n"); gets(kelime);  printf("%s", kelime); return 0; } 

19 Kodumuza bakacak olursak bir string tanımladık 100 boyutunda
Kodumuza bakacak olursak bir string tanımladık 100 boyutunda. (En fazla 100 boyutunda bir kelime girilebilir). Gets fonksiyonunun kullanımı gördüğünüz gibi çok kolay. Sadece içine string ismini yollamak yeterli oluyor. Ardındansa stringimizi ekrana bastırdık. Bunun için geçen seferki gibi döngü kullanmadık , sadece tek bir printfle %s (string olduğunu belirtir) kullanarak bastırdık. 

20 Bir string i farklı yöntemlerle ekrana yazdırılması
#include <stdio.h> int main() { char dizi[7] = {'S', 'e', 'l', 'a', 'm', '!', '\0'}; int i; /* Herbir karakteri ayrı ayrı alt alta yaz */ printf("Dizi elemanlari:\n"); for (i=0; i<7; i++) printf("dizi[%d] icerigi: %c\n", i, dizi[i]); printf("\n"); /* 1. yöntem: her elemanı yanyana yaz */ printf( "Butun dizi (1.yontem): "); printf("%c", dizi[i]); /* 2. Yöntem: bütün diziyi yaz */ printf("\nButun dizi (2.yontem): "); printf("%s\n", dizi); return 0; }

21 ÇIKTI Dizi elemanlari: dizi[0] icerigi: S dizi[1] icerigi: e
dizi[2] icerigi: l dizi[3] icerigi: a dizi[4] icerigi: m dizi[5] icerigi: ! dizi[6] icerigi: Butun dizi (1.yontem): Selam! Butun dizi (2.yontem): Selam!

22 Bir string içinde 'm' karakterinin sayısını öğrenme
#include <stdio.h> int main() { char str[20]; int i, sayac=0; printf("Bir string girin: "); gets(str); for(i=0; str[i] != '\0'; i++) if( str[i] == 'm') sayac++; printf("'m' karakteri sayisi = %d\n",sayac); return 0;}

23 ÇIKTI Bir katar girin: marmara'm' karakteri sayisi = 2

24 Bir string yazdırma [/* Bir elemanları string olan karakter dizisini yazdırma */ ]
#include <stdio.h> int main() { char *gun[7] = { "Pazartesi", "Sali", "Carsamba", "Persembe", "Cuma", "Cumartesi", "Pazar" }; int i; for(i=0; i<7; i++) printf("%d. %s\n",i+1,gun[i]); return 0;}

25 ÇIKTI 1. Pazartesi 2. Sali 3. Carsamba 4. Persembe 5. Cuma
6. Cumartesi 7. Pazar

26 strcmp fonksiyonunun kullanımı [Basit bir şifre programı
strcmp fonksiyonunun kullanımı [Basit bir şifre programı. Kullanıcı en fazla 3 kez yanlış şifre ] int main() { char sifre[8]; int sonuc, hak=3; while( hak-- > 0 ) { printf("Sifre : "); gets(sifre); /* şifreyi al */ sonuc = strcmp(sifre,"elma%xj4"); if( sonuc==0 ) { /* şifre kontrol */ puts("sifre dogru"); break; } else puts("sifre yanlis"); } return 0;}

27 ÇIKTI Sifre : adminsifre yanlisSifre : rootsifre
yanlisSifre : elma%xj4 sifre dogru

28 strcpy fonksiyonunun kullanımı [Bir string diğerine kopyalama ]
#include <stdio.h> #include <string.h> int main() { char str1[] = "Deneme"; char str2[15], str3[15]; int i; /* strcpy kullanarak kopyalama */ strcpy(str2, str1); /* strcpy kullanmadan kopyalama */ for(i=0; str1[i]; i++) str3[i] = str1[i]; str3[i] = '\0'; /* sonlandırıcı ekle */ /* sonuçlar ekrana */ printf("str1 : %s\n",str1); printf("str2 : %s\n",str2); printf("str3 : %s\n",str3); return 0;}

29 ÇIKTI str1 : Deneme str2 : Deneme str3 : Deneme

30 strcat fonksiyonunun kullanımı Bir katarı diğerine ekler
#include <stdio.h> #include <string.h> int main() { char mesaj[20] = "Selam "; /* 1. katar */ char isim[10]; /* 2. katar */ printf("Adiniz ? : "); scanf("%s",isim); /* ekle */ strcat(mesaj, isim); printf("%s\n",mesaj); return 0;}

31 ÇIKTI Adiniz ? : Derya Selam Derya

32 strlen fonksiyonunun kullanımı [Bir karakter dizisinin uzunluğunu bulur ]
#include <stdio.h> #include <string.h> int main() { char s[20]; int k = 0; printf("Bir seyler yazin : "); scanf("%s",s); /* sonlandırıcı karaktere kadar */ while( s[k] != '\0' ) k++; puts("Dizinin uzunlugu"); printf("strlen kullanarak = %d\n",strlen(s)); printf("strlen kullanmadan = %d\n",k); return 0;}

33 ÇIKTI Bir seyler yazin : deneme stringi Dizinin uzunlugu
strlen kullanarak = 14 strlen kullanmadan = 14

34 Isim sırlama [Kabarcık Sıralama (Bubble Sort) Algoritması ile isimleri alfabetik sırayla listeler ]
#include <stdio.h> #include <string.h> #define n 5int main() { char isim[n][8] = { "Semra", "Mustafa", "Ceyhun", "Asli", "Leyla" }; char gecici[8]; int i,j,k; puts("Once:\n------"); for(i=0; i<n; i++) printf("%s\n",isim[i]); /* sırala */ for(k=0; k<n-1; k++) for(j=0; j<n-1; j++) if( strcmp(isim[j],isim[j+1]) > 0 ) /* isim[j]>isim[j+1] ? */ { strcpy(gecici ,isim[j]); strcpy(isim[j] ,isim[j+1]); strcpy(isim[j+1],gecici); } puts("\nSonra:\n------"); printf("%s\n",isim[i]); return 0;}

35 Once: ------ Semra Mustafa Ceyhun Asli Leyla Sonra: ------ Asli Ceyhun Leyla Mustafa Semra

36 strlen dengi bir fonksiyon: struzn [Bir katarın uzunluğunu bulan strlen dengi bir fonksiyon ]
#include <stdio.h> #include <string.h> int struzn(char *); int main() { char *s; printf("Bir katar girin: "); gets(s); printf("Uzunlugu (struzn) : %d\n",struzn(s)); printf("Uzunlugu (strlen) : %d\n",strlen(s)); return 0;}/* bir karakter dizisinin uzunluğunu hesaplar */ int struzn(char *str){ int n = 0; while(str[n]) n++; return n;}

37 ÇIKTI Bir katargirin:Programlama Uzunlugu (struzn) : 11
Uzunlugu (strlen) : 11

38 strrev dengi bir fonksiyon: strcev [: Bir katarın tersini veren bir fonksiyon */ ]
#include <stdio.h> #include <string.h> char *strcev(char *); int main(){ char s[50]; printf("Bir katar girin: "); scanf("%s",s); printf("Katar, s : %s\n",s); printf("Tersi, strcev(s) : %s\n",strcev(s)); return 0;}/* str katarını ters-yüz eder */ char *strcev(char *str){ int i,n; char gecici; n = strlen(str); for(i=0; i<n/2; i++) { gecici = str[i]; str[i] = str[n-i-1]; str[n-i-1] = gecici; } return str; /* geri dönüş değeri bir gösterici */}

39 ÇIKTI Bir katar girin: Programlama Katar, s : ProgramlamaTersi,
strcev(s) : amalmargorP

40 Klavyeden enter tuşuna basılıncaya girilen bir ifadenin bir değişkende saklanmasını sağlayan bir program yazınız. #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char cumle[1024],ch; int s=0; ch=getc(stdin); while (ch!='\n'){ cumle[s]=ch; s++; } cumle[s]='\0'; // girilen ifadenin sonuna karakter dizesi sonu işaretini yerleştiriyoruz.// system("PAUSE"); return 0;

41 Klavyeden girilmiş bir ifadenin uzunluğunu strlen fonksiyonu kullanmadan bulan programı yazınız.
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char cumle[1024]; int s=0; gets(cumle); while (cumle[s]!='\0')s++; printf("Uzunluk:%d\n",s); // girilen ifadenin sonuna kadar harfler sayılır.karakter dizesi sonu işaretini bulmaya çalışıyoruz system("PAUSE"); return 0; }

42

43 Klavyeden istenilen uzunlukta veya enter tuşuna basılıncaya kadar ifadelerin okunmasını sağlayan programı yazınız. #include <stdio.h> #include <stdlib.h> #define SAY 15 int main(int argc, char *argv[]) { char kelime[SAY]; int l; l=0; while((kelime[l]=getc(stdin))!='\n' && l<SAY) l++; if (l>=SAY) l=SAY-1; kelime[l]='\0'; system("PAUSE"); return 0; }

44 1. c = sıradaki karakteri oku 2. Eğer c boşluk ise 4. adıma git
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ılmamış 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 kara

45 #include <stdio.h>
#include <stdlib.h> int main(int argc, char *argv[]) { 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] == ' ') else if (yaz) { printf("%c", s[i]); yaz = 0; system("PAUSE"); return 0; }

46 String tipi bir değişkenin değerini tamsayısal tipe dönüştüren işlevi yazınız.(atoi (stdlib.h)) Girdi : Tamsayısal string Çıktı : Karşılık gelen sayı #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { int deger (char *); char *c; int i; c="93t54"; i=deger(c); printf("%s dizi katarının sayısal karşılığı %d \n",c, i); } int deger( char *s) int i,j; int x; /*sayı */ x = 0; for (i = 0; i<strlen(s); i++) { j = s[i] - '0'; x = x * 10 + j ; system("PAUSE"); return 0;

47 Bir dizgi içerisindeki bir karakterin bulunması
Bir dizgi içerisindeki bir karakterin bulunması. i harfini İ ile değiştiren program. #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { char *s1, *s2, *s3; int i; clrscr(); s1="ali zil çaldi"; strcpy(s2, s1); for (i=0; i<strlen(s1); i++) if (s1[i] == 'i') s1[i] = 'İ'; printf("%s\n",s1); system("PAUSE"); return 0; }

48

49

50

51

52

53

54

55 Bir dizgi içerisindeki bir karakterin bulunması
Bir dizgi içerisindeki bir karakterin bulunması. i harfini İ ile değiştiren program. #include <string.h> #include <stdio.h> int main() { char *s1, *s2, *s3; int i; clrscr(); s1="ali zil çaldi"; strcpy(s2, s1); for (i=0; i<strlen(s1); i++) if (s1[i] == 'i') s1[i] = 'İ'; printf("%s\n",s1);

56 BİZİ DİNLEDİĞİNİZ İÇİN
TEŞEKKÜR EDERİZ... DİDEM ÜZMEZ DERYA EDEBALİ


"STRİNG FONKSİYONLARI." indir ppt

Benzer bir sunumlar


Google Reklamları