STRİNG FONKSİYONLARI.

Slides:



Advertisements
Benzer bir sunumlar
String fonksiyonları:
Advertisements

Dizi Kullanan Örnekler
Diziler.
Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama
JAVASCRİPT VERİ TÜRLERİ
Göstericiler (Pointers)
Bölüm 2 C Dilinin Temelleri
switch - case Yapısı Döngü Yapıları
String Diziler(Katarlar)
C Programlama Diline Giriş
STRING FONKSİYONLARI Tip Tanımları: char a; char ad[16]; char *ad;
Tanım ANSI C dizgisi (string) bir karakter dizisidir (array of characters) Örnek dizgi tanımları: #define UYARI_DIZGISI “Veri giris hatasi” #define DIZGI_BOYU.
Diziler.
Selçuk Üniversitesi’nin Bilişime Gönül Veren Gençleri
Elektrik-Elektronik Mühendisliği Bölümü DİZİLER C Programlama Dili Yaz Stajı Cengiz TEPE SAMSUN 2007.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Bölüm 9 Dizgiler Dizgi Tanımı Dizgi Girdi İşlemleri
Bölüm 9 Dizgiler Dizgi Tanımı Dizgi Girdi İşlemleri
String Kütüphanesindeki Arama Fonksiyonları
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
BPR152 ALGORİTMA VE PROGRAMLAMA - II
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.
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
Bilgisayar Programlama (Yrd. Doç. Dr. İbrahim ASRİ)
While Döngüsü Tekrarlama deyimidir. Bir küme ya da deyim while kullanılarak bir çok kez yinelenebilir. Yinelenmesi için koşul sınaması döngüye girilmeden.
6. HAFTA
C++ Temelleri C++ genel amaçlı, nesne tabanlı, yüksek seviye programlama dilidir.
C ile Programlamaya Giriş
FONKSİYONLAR.
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
C PROGRAMLAMA DİZİLER (ARRAYS).
Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
Fonksiyonlar Fonksiyon Tanımı
Algoritma & Programlama
Diziler (Arrays).
Temel Giriş/Çıkış Fonksiyonları
Bölüm 3: Diziler BTEP 102 – Veri Yapıları ve Programlama
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
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ı.
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
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.
Sıralama. Sıralama, bir dizideki sayısal elemanların küçükten büyüğe veya büyükten küçüğe, sayısal olmayan bir dizideki elemanların ise A’ dan Z’ ye.
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
Bölüm 2 C Dilinin Temelleri Genel Kavramlar Yazım ve Noktalama Kuralları C Kütüphaneleri C Dilindeki Sözcükler Değer Sabitleri Veri Tipleri Değişkenler.
Programlamaya Giriş-I Bölüm-1. Algoritma Algoritma günlük yaşamımızda yaptığımız işler sırasında sıklıkla kullandığımız bir yöntemdir. Algoritma, bir.
Fonksiyonlar ve Diziler
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
C Sharp 9. hafta - dIZILER.
BÖLÜM 5 POINTER’LER (İŞARETÇİLER)
tanımları yapabilmeniz gerekmektedir .
C Programlama Yrd.Doç.Dr. Ziynet PAMUK BMM211-H12
Bölüm 9 Dizgiler Dizgi Tanımı Dizgi Girdi İşlemleri
Bölüm 2 C Dilinin Temelleri
PROGRAM KONTROL KOMUTLARI 1. if koşulu 2. if else koşulu
YAPISAL PROGRAMLAMA Hafta-7
Bölüm 2 C Dilinin Temelleri
Diziler(Arrays).
Sunum transkripti:

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

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.

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.

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.

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.

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 */

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

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. 

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.

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 */

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.

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.

Ö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; } 

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.  

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.

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

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. 

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; }

Ç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!

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;}

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

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;}

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

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;}

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

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;}

ÇIKTI str1 : Deneme str2 : Deneme str3 : Deneme

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;}

ÇIKTI Adiniz ? : Derya Selam Derya

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;}

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

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;}

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

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;}

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

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 */}

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

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; -------------------------------------------------------------------------------------

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; }

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; }

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

#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; }

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;

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; }

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);

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