Stringler
Bilgisyar ve Programlaya
Course
Giriş
C'de String (Karakter Dizileri) Konusu
C dilinde string, yani metin verileri, karakterlerden oluşan dizilerle temsil edilir. C dilinde bir
"string" aslında sonu null karakter ( '\0' ) ile sonlandırılmış bir karakter dizisidir. Bu temel
yapı, daha büyük metin işlemleri için bir temel sağlar.
1. String'in Tanımı ve Yapısı
Bir string, bir karakter dizisidir ve her karakter bellekte ardışık adreslerde saklanır. String,
özel bir sonlandırıcı olan '\0' (null karakter) ile biter. Bu null karakter, string'in sonunu işaret
eder.
String'in Bellekte Temsili
char str[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
Yukarıdaki dizi, "Hello" string'ini temsil eder ve bellekte şu şekilde saklanır:
Adres İçerik
0x01 H
0x02 e
0x03 l
0x04 l
0x05 o
0x06 '\0'
2. String Tanımlama
a) Statik String Tanımlama
Stringler 1
Statik string'ler, sabit bir boyutla önceden tanımlanır.
char str1[6] = "Hello"; // Boyut açıkça belirtilmiş
char str2[] = "World"; // Boyut derleyici tarafından belirlenir
b) Dinamik String Tanımlama
Dinamik string'ler, malloc ile bellekten ayrılan alanlarla kullanılır.
#include <stdlib.h>
char *str = (char *)malloc(20 * sizeof(char)); // 20 karakterlik bellek ayrıldı
3. String Giriş ve Çıkış
String'i Tanımlayıp Yazdırma
#include <stdio.h>
int main() {
char str[] = "Merhaba Dünya!";
printf("String: %s\n", str);
return 0;
}
String Kullanıcıdan Alma
scanf ve gets fonksiyonları kullanılarak string alabilirsiniz.
Örnek: scanf ile String Alma
#include <stdio.h>
int main() {
char str[20];
printf("Bir string girin: ");
scanf("%s", str);
printf("Girdiğiniz string: %s\n", str);
Stringler 2
return 0;
}
Not: scanf yalnızca ilk boşluk karakterine kadar olan kısmı alır. Çok kelimeli girişler için
gets veya fgets tercih edilmelidir.
Örnek: fgets ile String Alma
#include <stdio.h>
int main() {
char str[50];
printf("Bir string girin: ");
fgets(str, sizeof(str), stdin);
printf("Girdiğiniz string: %s\n", str);
return 0;
}
4. String Fonksiyonları
C dilinde string işlemleri için standart kütüphane fonksiyonları sunulmuştur. Bu fonksiyonlar
string.h kütüphanesi içinde bulunur.
Fonksiyon Açıklama
strlen String'in uzunluğunu döndürür (null hariç).
strcpy Bir string'i diğerine kopyalar.
strcat İki string'i birleştirir.
strcmp İki string'i karşılaştırır.
strchr String içinde bir karakter arar.
strstr Bir string içinde başka bir string arar.
Örnekler
strlen Kullanımı
#include <stdio.h>
#include <string.h>
int main() {
Stringler 3
char str[] = "C Programlama";
printf("String uzunluğu: %zu\n", strlen(str));
return 0;
}
strcpy Kullanımı
#include <stdio.h>
#include <string.h>
int main() {
char kaynak[] = "Merhaba";
char hedef[20];
strcpy(hedef, kaynak);
printf("Hedef string: %s\n", hedef);
return 0;
}
strcat Kullanımı
#include <stdio.h>
#include <string.h>
int main() {
char str1[20] = "Merhaba ";
char str2[] = "Dünya!";
strcat(str1, str2); // str1'e str2'yi ekler
printf("Birleşmiş string: %s\n", str1);
return 0;
}
strcmp Kullanımı
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "abc";
Stringler 4
char str2[] = "abd";
int sonuc = strcmp(str1, str2);
if (sonuc == 0) {
printf("String'ler eşit.\n");
} else if (sonuc < 0) {
printf("str1, str2'den küçüktür.\n");
} else {
printf("str1, str2'den büyüktür.\n");
}
return 0;
}
5. String İşlemleri ile Örnekler
Palindrom Kontrolü
Bir string'in tersten yazılışı, aynı string ile aynıysa bu string "palindrom"dur.
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
int uzunluk, palindrom = 1;
printf("Bir string girin: ");
scanf("%s", str);
uzunluk = strlen(str);
for (int i = 0; i < uzunluk / 2; i++) {
if (str[i] != str[uzunluk - i - 1]) {
palindrom = 0;
break;
}
}
if (palindrom) {
Stringler 5
printf("String bir palindromdur.\n");
} else {
printf("String bir palindrom değildir.\n");
}
return 0;
}
Kelime Sayma
Bir string içinde kaç kelime olduğunu bulma.
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
int kelimeSayisi = 1;
printf("Bir cümle girin: ");
fgets(str, sizeof(str), stdin);
for (int i = 0; str[i] != '\0'; i++) {
if (str[i] == ' ' && str[i + 1] != ' ' && str[i + 1] != '\0') {
kelimeSayisi++;
}
}
printf("Kelime sayısı: %d\n", kelimeSayisi);
return 0;
}
String Ters Çevirme
#include <stdio.h>
#include <string.h>
int main() {
Stringler 6
char str[100], ters[100];
int uzunluk;
printf("Bir string girin: ");
scanf("%s", str);
uzunluk = strlen(str);
for (int i = 0; i < uzunluk; i++) {
ters[i] = str[uzunluk - i - 1];
}
ters[uzunluk] = '\0';
printf("Ters string: %s\n", ters);
return 0;
}
6. Sık Yapılan Hatalar
1. Null Karakteri Unutma:
Bir string'in sonlandırıcı ( '\0' ) karakterine sahip olması gerekir.
Elle oluşturulan dizilerde bu unutulursa, hatalı sonuçlar alınabilir.
2. Yetersiz Bellek Tahsisi:
Bir string için yeterli bellek ayrılmadığında taşmalar meydana gelebilir.
3. scanf Kullanımı:
scanf yalnızca ilk boşluğa kadar olan kısmı okur. Çok kelimeli girişlerde fgets
tercih edilmelidir.
4. Bellek Sızıntıları:
Dinamik string'lerde malloc ile ayrılan bellek, kullanılmadığında free ile serbest
bırakılmalıdır.
Ders Videoları
[Link]
[Link]
[Link]
Stringler 7
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
Stringler 8