STRING (SÖZEL) İŞLEMLER Yrd. Doç.Dr. Bülent Çobanoğlu
String ve Karakter Tanımlama Tek bir karakter tanımlamak: char a; Bir karakter dizisi tanımlamak: char a[10]; Pointer kullanarak char *a= ali ; Pointer kullanmadan char a[]= ali ; Bir String dizisi tanımlamak: char a[][10]= ali, veli, alim ;
String ve Karakterleri Ekrana yazdırmak char ad[40]="ali Uzunkavakaltindauyuyanoglu"; //40 karakterlik ad isimli string bir değişkene değer atandı printf (ad);//string değişken formatsız ekrana yazdırıldı printf ("\n%s",ad); //normal formatlı kullanım printf ("\n%.5s",ad);//ilk 5 karakter ekrana yazdırıldı printf ("\n%s",ad+8);//8.karakterden sonrası yazdırıldı. cout << ad; //C++ için printf komutunun eşdeğer, cout << ad+8<<"\n";//8.karakterden sonrası yazdırıldı puts (ad); //printf (ad); eşdegeri //Tek bir karakteri ekrana yazdırmak için; putchar (ad[5]); //ad dizisinin 5. karakterini yazar printf ("\n%c %C %c ", ad[0], ad[1], ad[2]); //ad dizisinin ilk 3 karakterini yazar for (i=0; i<strlen(ad); i++) printf ("%c",ad[i]); //Bir döngü içerisinde bütün karakterler ekrana yazdırıldı.
Klavyeden girilen String ifadeyi Almak Klavyeden girilen bir karakteri Almak char Ad; scanf ("%c", &Ad); //Ad=getchar(); printf ("basilan karakter [%c] dir", Ad);
String Sabitler Nasıl Depolanır? Derleyici, n karakterlik bir string sabit için bellekte n+1 byte yer ayırır. Sebebi; String karakterlerin sonuna null ( \0 ) karakterini yerleştirmesidir. Sakın \0 (null) ile 0 (Sıfır) karıştırmayın. Birinin ASCII kod karşılığı 0 iken diğerinin ki 48 dir.
String işlem Komutları/Fonksiyonları (string.h) kütüphanesi altında çalışan fonksiyonlar; strcat (s,t) : s nin sonuna t yi ekler strncat(s,t,n): s nin sonuna n adet t ekler strcmp (s,t): s ile t yi karşılaştırır. Eğer s<t ise negatif, s==t ise 0, s>t ise pozitif bir değer döndürür. strncmp (s,t,n): s ile t yi n. Karaktere kadar karşılaştırır. strcmp(), null karakterini görene kadar bütün karakterleri karşılaştırırken, strncmp( ) n. Karaktere kadar karşılaştırma yapar strcpy(s,t): t yi s ye kopyalar strncpy(s,t,n): t nin n. Karakterine kadar s ye kopyalar strlen(s): s nin uzunluğunu verir strrev(s): s nin karakterlerini(cümleyi) ters çevirir. strlwr(s): s yi küçük harfe dönüştürür. strupr (s): s yi büyük harfe dönüştürür. strchr(s,c): s içerisinde c yi baştan arar, bulamazsa 0(NULL) döndürür strrchr(s,c):s içerisinde c yi sondan arar, bulamazsa 0(NULL) döndürür
char ad[30]="alim"; char soyad[30]="uzunkavakaltindauyumazoglu"; char B[20]; printf ("%.6s\n",soyad); //Uzunka printf ("%s\n", soyad+15);//auyumazoglu printf ("%d\n", strlen(ad));//4 printf ("%s\n", strrev(ad));//mila printf ("%s\n", strlwr(soyad));//tamami küçük harf printf ("%s\n", strupr(soyad));//tamami büyük harf printf ("%s\n", strcat(ad,soyad)); printf ("%s\n", strcpy(ad,soyad)); strncpy(b,soyad+10,10); printf ("%s\n",b);
Karakter Fonksiyonları (ctype.h) ispunct(k) k bir noktalama karakteri ise sıfırdan farklı, değilse sıfır üretir.
Klavyeden girilen bir Stringi tersten ekrana yazdıran program #include <cstdlib> #include <iostream> #include <stdio.h> #include <string.h> using namespace std; int main() char isim[30]; //Cin, scanf, gets klavyeden string alır printf("cumleyi giriniz\n"); gets(isim);//ismi al strrev(isim);//ters çevir printf ("%s\n", isim); //ekrana yaz system("pause");
II. Yol : Klavyeden girilen bir Stringi tersten ekrana yazdıran program (strrev kullanmadan) #include <iostream>//cout #include <stdio.h> //gets, printf #include <string.h>//strlen #include <conio.h> //getch() using namespace std; int main() char strdizi[50]; int len, i; char tmp; cout << "Cumle: "; gets(strdizi); len = strlen(strdizi); cout << "\ntersi: "; for (i = len; i >=0; i--) tmp = strdizi[i]; printf ("%c", tmp); getch(); int main() char Ad[30]; gets(ad); int i,uz=strlen(ad); for (i=uz; i>=0; i--) printf ("%c", Ad[i]); getch();
Bir Stringi tersten ekrana yazdıran program Bir String diziden n adet karakteri başka bir diziye kopyalayan program #include <stdio.h> #include <string.h> #include <iostream> using namespace std; int main() char A[8]="SAKARYA"; printf ("%s\n", strrev(a) ); #include <stdio.h> #include <string.h> #include <iostream> using namespace std; int main() int i; char B[5], A[8]="SAKARYA"; strncpy(b,a,4); for (i=0; i<4; i++ ) printf ("%c\n", B[i] );
Soru: Türkçe-İngilizce Günleri Gösteren Bir Sözlük #include <conio.h> #include <stdio.h> #include <string.h> using namespace std; int main() char tr[][20]="pazartesi","sali", "Carsamba", "Persembe", "Cuma","Cumartesi","Pazar"; char en[][20]="monday","tuesday", "Wednesdey", "Thursday", "Friday","Saturday","Sunday"; char gun[20]; int i; printf ("Gun giriniz..:"); gets(gun); for (i=0; i<7; i++) if (strcmp(gun,tr[i])==0) //girilen gun tr dizisinde varsa printf ("%s...: %s",tr[i], en[i]); break; if (strcmp(gun,tr[i])!=0) printf ("\nsozlukte yoktur"); getch();
C/C++ dili Tip(Stringden Sayısala veya Tam Tersi) Dönüşümleri itoa fonksiyonu, int tipindeki ondalık sayıyı (intdegisken), sayitabani ile gösterilen 2 lik, 8 lik veya 16 lık sayı tabanına dönüştürerek sonucu string bir değişkende (stringdegisken) tutar. atoi fonksiyonu ile tam tersi işleve sahiptir. Kullanım şekli; itoa (intdegisken, stringdegisken, sayitabani); atoi fonksiyonu, String / sözel biçimde bulunan sayısal bilgiyi tamsayı biçimine dönüştürür. NULL karakterini yâda ilk sözel karakteri gördüğünde işlemi sonlandırır. Geri dönüş değeri int veri tipi değeridir. int b=atoi(strs); //string sayı int sayı tipine tekrar dönüştürüldü. atof fonksiyonu: String / sözel biçimde bulunan kesirli sayıyı double biçimine dönüştürür. NULL karakterini yâda nokta dışında ilk sözel karakteri gördüğünde işlemi sonlandırır. atol fonksiyonu: String / sözel biçimde bulunan sayısal bilgiyi tamsayı biçimine dönüştürür. NULL karakterini yâda ilk sözel karakteri gördüğünde işlemi sonlandırır. Geri dönüş değeri long veri tipi değeridir.
Soru: Aşağıdaki ekran çıktısını verecek C/C++ programını yazınız. itoa(i, s, 2); //ikili sayı sistemine string formatta dönüştürüldü. int b=atoi(s); //string sayı int sayı tipine tekrar dönüştürüldü.
Olası hatayı bulunuz? #include <stdio.h> #include <conio.h> #include <string.h> int main(void) char *p1="abc", p2[][12]= Kara Deniz"; printf("%s %s %s\n", p1, p2, strcat(p1, p2)); getch();
Girilen bir cümledeki harflerin sayısını ve kendisini veren uygulama (isalpha) #include <stdio.h> #include <string.h> #include <conio.h> #include <ctype.h> int main(void) char cumle[50]; char harf[50]; int i, sayac=0; gets(cumle); for (i=0; i< strlen(cumle); i++) if (isalpha(cumle[i])!=0) harf[sayac]=cumle[i]; sayac++; printf ("Cumledeki harf sayisi..:%d\nharler..:",sayac); for (i=0; i<sayac; i++) printf ("%c ",harf[i]); getch();
Girilen bir cümledeki kelime sayısını bulan uygulama (isspace) #include <stdio.h> #include <string.h> #include <conio.h> #include <ctype.h> int main(void) char cumle[50]; int i, sayac=0; gets(cumle); for (i=0; i< strlen(cumle); i++) if (isspace(cumle[i])!=0) sayac++; printf ("\ncumledeki kelime sayisi..:%d",sayac+1); getch();
Password programı #include <conio.h> #include <stdio.h> #include <string.h> using namespace std; int main() char sifre[20]; int sayac=0; do printf ("password giriniz..:"); gets(sifre); if (strcmp(sifre,"44ali")==0) //girilen sifre dogru ise printf ("sifre dogru"); break; sayac++; while (sayac<3); if (sayac>=3) printf ("\nhakkiniz doldu"); getch();