1 / 56

STRİNG FONKSİYONLARI

STRİNG FONKSİYONLARI. 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. Scanf ve Printf.

cora
Download Presentation

STRİNG FONKSİYONLARI

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. STRİNGFONKSİ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çimleriDizi ş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. #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;}  Örnekler

  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. (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): "); • for (i=0; i<7; i++) • printf("%c", dizi[i]); • /* 2. Yöntem: bütün diziyi yaz */ • printf("\nButun dizi (2.yontem): "); • printf("%s\n", dizi); • printf("\n"); • 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ı. 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------"); • for(i=0; i<n; i++) • 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şkendesaklanması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++; • ch=getc(stdin); • } • 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 kullanmadanbulan 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. Klavyeden istenilen uzunlukta veya enter tuşuna basılıncaya kadarifadelerin 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; • }

  43. 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

  44. #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] == ' ') • yaz = 1; • else • if (yaz) { • printf("%c", s[i]); • yaz = 0; • system("PAUSE"); • return 0; • }

  45. 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; • }

  46. 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; • }

More Related