Her Yönüyle C
Would you like to react to this message? Create an account in a few clicks or log in to continue.
Her Yönüyle C

Hepsi Burada
 
AnasayfaAnasayfa  PortalliPortalli  GaleriGaleri  AramaArama  Latest imagesLatest images  Kayıt OlKayıt Ol  Giriş yapGiriş yap  

 

 STRİNGLER

Aşağa gitmek 
YazarMesaj
Admin
Admin
Admin


Erkek
Mesaj Sayısı : 804
Yaş : 35
Location : KoCaElİ
Kayıt tarihi : 29/10/07

Character sheet
Field:
STRİNGLER Left_bar_bleue100/100STRİNGLER Empty_bar_bleue  (100/100)

STRİNGLER Empty
MesajKonu: STRİNGLER   STRİNGLER Icon_minitimePtsi Kas. 12, 2007 2:29 am

Giriş Stringler anlaşılması en zor konulardan biridir. C programlama dilinde "iki tırnak içine alınan" her ifadeye string denir. Örneğin:
"Izmir"
"sonuc = %d\n"
"Devam etmek icin ENTER tusuna basin."
Türkçe yazılan C kitaplarda string kelimesi yerine aşağıdaki ifadelerden biri karşılaşılabilir:
String = katar = karakter topluluğu = karakter dizisi
Bu bölümde stringlerin bildirimi, kullanılması ve işaretçilerle olan ilgisi konu edilecektir.
String Bildirimi Stringler, char tipinde bildirilen karakter dizileridir ve içeriği harfler, rakamlar, veya bazı sembolleri tutmak (saklamak) için kullanılır. C dilinde string bildirimi için bir tip deyimi yoktur. Bu yüzden, bir stringe bir dizi veya işaretçi gözüyle bakılır. Genel olarak bir stringin bildirimi:
char string_adı[eleman_sayısı];yada char *string_adı;şeklinde yapılır. Örneğin bir öğrencinin isim bilgisi ad adlı bir stringle tutulmak istenirse:
char ad[10];yada char *ad;şeklinde programın başında bildirilmelidir.
Stringlere Başlangıç Değeri Atama 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. Daha önce de bahsedildiği gibi sonlandırıcı karakter, karakter dizileri üzerinde işlemlerin hızlı ve etkin bir biçimde yapılabilmesine olanak sağlar. İkinci bildirimde buna gerek yoktur.
Eğer bir karakter dizisinin kaç elemandan oluşacağı belirtilmezse, başlangıçta bildirilen karakter sayısı kaç tane ise dizinin eleman sayısı o kadar olduğu varsayılır.
char s[]="Ankara"; /* 6 elemanlı */
Eğer bildirim işaretçi ile yapılmak isterirse:
char *s="Ankara"; /* 6 elemanlı */
yada char *s;
...
s = "Ankara";
Ancak char s[6];
...
s = "Ankara";

şeklindeki bir atama geçersizdir. Çünkü bu şekilde yapılan bildirimde s bir değişken değil dizidir. Elemanları string olan diziler tanımlamak mümkündür. Örneğin en uzunu 7 karakter olan 5 farklı isim bir çatı altında şöyle toplanabilir:
char isim[5][8] = { "Semra", "Mustafa", "Ceyhun", "Asli", "Leyla" };
yada char isim[][8] = { "Semra", "Mustafa", "Ceyhun", "Asli", "Leyla" };
yada char *isim[5] = { "Semra", "Mustafa", "Ceyhun", "Asli", "Leyla" };
Görüldüğü gibi, bu tip tanımlamalarda birinci boyut (satır) dizinin eleman sayısını, ikinci boyut (sütun) her bir elemanın sahip olabileceği maksimum karakter sayısını gösterir.






NOT
String ifadelerinde doğrudan çift tırnak " veya ters bölü \ karakterleri kullanılamaz. Bu durumda string ifadeleri içerisinde
" yerine \"
\ yerine \\ kullanılmalıdır. Örneğin: char *mes = "\"ilk.c\" dosyasinin yeri:";
char *yol = "C:\\WINDOWS\\DESKTOP\\C";
...
puts(mes);
puts(yol);
ile ekrana aşağıdaki satırlar bastırlır: "ilk.c" dosyasinin yeri:
C:\WINDOWS\DESKTOP\C
String Üzerinde İşlem Yapan Standart G/Ç Fonksiyonları Daha önce klavyeden tek bir karakter alan ve ekarana yazan fonksiyonları incelemiştik. Şimdi ise aynı işlemi birden çok karakter için nasıl yapıldığı incelenecektir.
printf ve scanf fonksiyonları diğer tiplerde olduğu gibi formatlı okuma/yazma amaçlı kullanılır. String formatı %s dir. Örneğin:
char str[20];
...
scanf("%s",str);
printf("%s\n",str);
satırları ile klavyeden okunan stringin ilk 20 karakteri ekrana yazdırlabilir. Burada printf fonksiyonu:
printf(str);
şeklinde de kullanılabir. Bu durumda, string ekrana yazdırılır fakat imlec (cursor) bir alt satıra geçmez.
gets fonksiyonu klavyeden karakter dizisi almakta kullanılan bir C fonksiyonudur. Bu fonksiyon, klavyeden girilen karakterleri diziye yerleştirdikten sonra dizinin sonuna NULL karakterini koyar.
char str[20];
...
gets(str);
puts fonksiyonu bir karakter dizisini ekrana yazdırmak için kullanılır. Bu fonksiyon diziyi ekrana yazdırdıktan sonra imleci (cursor) bir sonraki satıra geçirir.
char str[20];
...
gets(str);
puts(str);
Dikkat edilirse puts(str) ile printf("%s\n",str) işlevsel olarak birbirine eşdeğerdir.
Buraya kadar anlatılanlar Program 11.1-3 de özetlenmiştir.

Program 11.1: Bir stringin farklı yöntemlerle ekrana yazdırılması




[color=gray] 1:
/* 11prg01.c:
2: Bir karakter dizisinin farklı yöntemlerle ekrana yazılması */

3:
4: #include <stdio>
5:
6: main()
7: {
8: char dizi[7] = {'S', 'e', 'l', 'a', 'm', '!', '\0'};
9: int i;
10:
11: /*--- Herbir karakteri ayrı ayrı alt alta yaz ---*/
12: printf("Dizi elemanlari:\n");
13: for (i=0; i<7; i++)
14: printf("dizi[%d] icerigi: %c\n", i, dizi);
15: printf("\n");
16:
17: /*--- 1. yöntem: her elemanı yanyana yaz ---*/
18: printf( "Butun dizi (1.yontem): ");
19: for (i=0; i<7> tcc 11prg01.c
C:\TC> 11prg02

$ gcc 11prg01.c -o 11prg01
$ ./11prg01


Ç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!
Aşağıdaki program kalvyeden girilen bir stringin içindeki 'm' karakterlerinin sayısını blup ekrana yazar. İnceleyiniz.

Program 11.2: [i]Bir string içinde 'm' karakterinin sayısını öğrenme





[color=gray] 1:
/* 11prg02.c: Bir stringin içindeki 'm' karakterlerinin sayısı hesaplar */
2:
3: #include <stdio>
4:
5: void main(void)
6: {
7: char str[20];
8: int i,sayac=0;
9:
10: printf("Bir string girin: ");
11: gets(str);
12:
13: for(i=0;str!='\0';i++)
14: if(str[i]=='m') sayac++;
15:
16: printf("'m' karakteri sayisi = %d\n",sayac);
17:
[color:3fb2=gray:3fb2]18: }
13. satırdaki döngüde , str[i]!='\0', koşulu ile sonlandırıcı karaktere gelinip gelinmedği sorgulanmaktadır. 14. satırda stringin içindeki 'm' karakterine rastlanırsa sayac değeri bir artmaktadır. String sonuna kadar bütün 'm' karakterlerinin toplamı hesaplanıp 16. satırda ekrana yazdırılmıştır.

DERLEME ve ÇALIŞTIRMA



MS DOS (Turbo C)
Linux

C:\TC> tcc 11prg02.c
C:\TC> 11prg02

$ gcc 11prg02.c -o 11prg02
$ ./11prg02


ÇIKTI




Bir string girin: marmara
'm' karakteri sayisi = 2
Program 11.2'deki döngü şöyle de yazılabilirdi:
...
for(i=0;str[i];i++)
if(str[i]=='m') sayac++;
...
Buradaki işlemle str[i] NULL karakterinden farklı olduğu sürece döngü devam ettirilmiştir.

Program 11.3: [i]Bir string dizisini yazdırma





[color=gray] 1:
/* 11prg03.c: Bir string dizisini yazdırma */
2:
3: #include <stdio>
4:
5: main()
6: {
7: char *gun[7] = { "Pazartesi", "Sali", "Carsamba",
8: "Persembe", "Cuma", "Cumartesi", "Pazar" };
9: int i;
10:
11: for(i=0;i<7> tcc 11prg03.c
C:\TC> 11prg03

$ gcc 11prg02.c -o 11prg03
$ ./11prg03


ÇIKTI




1. Pazartesi
2. Sali
3. Carsamba
4. Persembe
5. Cuma
6. Cumartesi
7. Pazar
Sayfa başına dön Aşağa gitmek
https://cprogramlama.yetkin-forum.com
Admin
Admin
Admin


Erkek
Mesaj Sayısı : 804
Yaş : 35
Location : KoCaElİ
Kayıt tarihi : 29/10/07

Character sheet
Field:
STRİNGLER Left_bar_bleue100/100STRİNGLER Empty_bar_bleue  (100/100)

STRİNGLER Empty
MesajKonu: Geri: STRİNGLER   STRİNGLER Icon_minitimePtsi Kas. 12, 2007 2:29 am

Bazı String Fonksiyonları Bu fonksiyonlar standart C'de iki stringi karşılaştırmak, bir stringin içeriğini diğerine kopyalamak ve stringin uzunluğunu bulmak vb işlemler için tanımlı fonksiyonlardır. Bu ve benzeri fonksiyonlar kullanılırken string.h kütüphanesi programın başına ilave edilmelidir. Burada sadece bunlardan bir kaçı Tablo 11.1 de verilmiştir.

Tablo 10.1: string.h kütüphanesine ait, bazı string fonksiyonları



Fonksiyon
Açıklama

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 (NULL karakteri hariç)

int strlen(str);
str nin kaç karakterden oluştuğunu hesaplar

char *strchr(char *str,char kr);
kr karakterinin str içindeki (baştan itibaren) ilk karşılaştığı yeri verir

char *strstr(char *str1,char *str2);
str2 stringinin 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 çevirirBu fonksiyonların kullanılması Program 11.4-8'de verilmiştir. Programları Dikkatle inceleyiniz.

Program 11.4: strcmp fonksiyonunun kullanımı




[color=gray] 1:
/* 11prg04.c: Basit bir şifre programı.
2: Kullanıcı en fazla 3 kez yanlış şifre girebilir. */

3:
4: #include <stdio>
5: #include <string>
6:
7: main()
8: {
9: char sifre[8];
10: int sonuc,hak=3;
11:
12: while( hak-- > 0 )
13: {
14: printf("Sifre : ");
15: gets(sifre); /* şifreyi al */
16:
17: sonuc = strcmp(sifre,"elma%xj4");
18:
19: if( sonuc==0 ){ /* şifre kontrol */
20: puts("sifre dogru");
21: break;
22: }
23: else
24: puts("sifre yanlis");
25: }
[color:07f3=gray:07f3]26: }


DERLEME ve ÇALIŞTIRMA



MS DOS (Turbo C)
Linux

C:\TC> tcc 11prg04.c
C:\TC> 11prg04

$ gcc 11prg04.c -o 11prg04
$ ./11prg04


ÇIKTI




Sifre : admin
sifre yanlis
Sifre : root
sifre yanlis
Sifre : elma%xj4
sifre dogru

Program 11.5: strcpy fonksiyonunun kullanımı




[color=gray] 1:
/* 11prg05.c: Bir stringi diğerine kopyalama */
2:
3: #include <stdio>
4: #include <string>
5:
6: main()
7: {
8: char str1[] = "Deneme";
9: char str2[15],str3[15];
10: int i;
11:
12: strcpy(str2,str1); /* strcpy kullanarak kopyalama */
13:
14: for(i=0;str1;i++) /* strcpy kullanmadan kopyalama */
15: str3[i] = str1[i];
16: str3[i] = '\0'; /* sonlandırıcı ekle */
17:
18: printf("str1 : %s\n",str1); /* sonuçlar ekrana */
19: printf("str2 : %s\n",str2);
20: printf("str3 : %s\n",str3);
[color:07f3=gray:07f3]21: }


DERLEME ve ÇALIŞTIRMA



MS DOS (Turbo C)
Linux

C:\TC> tcc 11prg05.c
C:\TC> 11prg05

$ gcc 11prg05.c -o 11prg05
$ ./11prg04


ÇIKTI




str1 : Deneme
str2 : Deneme
str3 : Deneme

Program 11.6: strcat [i]fonksiyonunun kullanımı





[color=gray] 1:
/* 11prg06.c: Bir stringi diğerine ekler */
2:
3: #include <stdio>
4: #include <string>
5:
6: main()
7: {
8: char mesaj[20] = "Selam ";
9: char isim[10];
10:
11: printf("Adiniz ? : ");
12: gets(isim);
13:
14: strcat(mesaj,isim); /* ekle */
15:
16: printf("%s\n",mesaj);
[color:07f3=gray:07f3]17: }


DERLEME ve ÇALIŞTIRMA



MS DOS (Turbo C)
Linux

C:\TC> tcc 11prg06.c
C:\TC> 11prg06

$ gcc 11prg06.c -o 11prg06
$ ./11prg06


ÇIKTI




Adiniz ? : Mert
Selam Mert

Program 11.7: strlen fonksiyonunun kullanımı




[color=gray] 1:
/* 09prg06.c: Bir karakter dizisinin uzunluğunu bulur */
2: /* 11prg07.c: Bir karakter dizisinin uzunluğunu bulur */
3:
4: #include <stdio>
5: #include <string>
6:
7: void main(void)
8: {
9: char s[20];
10: int k=0;
11:
12: printf("Bir seyler yazin : ");
13: gets(s);
14:
15: while( s[k]!='\0' ) /* sonlandırıcı karaktere kadar */
16: k++;
17:
18: puts("Dizinin uzunlugu");
19: printf("strlen kullanarak = %d\n",strlen(s));
20: printf("strlen kullanmadan = %d\n",k);
[color:07f3=gray:07f3]21: }


DERLEME ve ÇALIŞTIRMA



MS DOS (Turbo C)
Linux

C:\TC> tcc 11prg07.c
C:\TC> 11prg07

$ gcc 11prg07.c -o 11prg07
$ ./11prg07


ÇIKTI




Bir seyler yazin : deneme stringi
Dizinin uzunlugu
strlen kullanarak = 14
strlen kullanmadan = 14
Stringlerin Fonksiyonlarda Kullanılması Stringlerin fonksiyonlara parametre olarak geçirilmesi durumuna soklıkla rastlanır. Gerçekte fonksiyona parametre olarak aktarılan karakter dizisini gösteren bir adrestir. Bu yüzden karakter dizileri fonksiyonlara çoğunlukla işaretçi tipinde geçirilir.
Aşağıdaki iki örnekte yazılan struzn ve strcev fonksiyonları sırasıyla strlen ve strrev fonksiyonların dengi niteliğindedir. Burada kullanılan benzer mantıkla, string.h kütüphanesindki birçok fonksiyon yazılabilir. İnceleyiniz.

Program 11.9: strlen dengi bir fonksiyon: struzn




[color=gray] 1:
/* 11prg09.c: Bir stringin uzunluğunu bulan strlen dengi bir fonksiyon */
2:
3: #include <stdio>
4: #include <string>
5:
6: int struzn(char *str);
7:
8: main()
9: {
10: char *s;
11:
12: printf("Bir string girin: ");
13: gets(s);
14:
15: printf("Uzunlugu (struzn) : %d\n",struzn(s));
16: printf("Uzunlugu (strlen) : %d\n",strlen(s));
17: }
18:
19: int struzn(char *str)
20: {
21: int n=0;
22: while(str[n]) n++;
23: return n;
[color:07f3=gray:07f3]24: }


DERLEME ve ÇALIŞTIRMA



MS DOS (Turbo C)
Linux

C:\TC> tcc 11prg09.c
C:\TC> 11prg09

$ gcc 11prg09.c -o 11prg09
$ ./11prg09


ÇIKTI




Bir string girin: Gaziantep Universitesi
Uzunlugu (struzn) : 22
Uzunlugu (strlen) : 22

Program 11.10: strrev dengi bir fonksiyon: strcev




[color=gray] 1:
/* 11prg10.c: Bir stringin tersini veren bir fonksiyon */
2:
3: #include <stdio>
4: #include <string>
5:
6: char *strcev(char *str);
7:
8: main()
9: {
10: char s[50];
11:
12: printf("Bir string girin: ");
13: gets(s);
14:
15: printf("\nString : %s\n",s);
16: printf("Tersi : %s\n",strcev(s));
17: }
18:
19: char *strcev(char *str)
20: {
21: int i,n;
22: char gecici;
23:
24: n = strlen(str);
25: for(i=0;i<n> tcc 11prg10.c
C:\TC> 11prg10

$ gcc 11prg09.c -o 11prg10
$ ./11prg10


ÇIKTI




Bir string girin: C ile programlama

String : C ile programlama
Tersi : amalmargorp eli C

Program 11.11: str_alt fonksiyonu




[color=gray] 1:
/* 11prg11.c: Bir stringin parcalarini (alt string) veren fonksiyon */
2:
3: #include <stdio>
4: #include <string>
5:
6: char *str_alt(char *str,int,int);
7:
8: main()
9: {
10: int i;
11: char s[50],*alt;
12:
13: printf("Bir string girin: ");
14: gets(s);
15:
16: for(i=0;s[i];i++)
17: {
18: alt = str_alt(s,0,i);
19: puts(alt);
20: }
21: }
22:
23: /* bir str'nin p1. elemanindan p2. elemanina
24: kadar olan alt string gonderir. */

25: char *str_alt(char *str,int p1,int p2)
26: {
27: int i,j=0,n;
28: static char *sub_str;
29: n = p2-p1;
30:
31: sub_str = (char *) malloc( n*sizeof(char) );
32:
33: for(i=p1;i<=p2;i++)
34: sub_str[j++] = str[i];
35:
36: return sub_str;
37: }
[color:07f3=gray:07f3]38:
Sayfa başına dön Aşağa gitmek
https://cprogramlama.yetkin-forum.com
 
STRİNGLER
Sayfa başına dön 
1 sayfadaki 1 sayfası

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
Her Yönüyle C :: C Programlama :: C Konu Anlatımları-
Buraya geçin: