crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
Strings: Karakter Dizilerinde Modern ve Klasik Yaklaşımlar
Metinler aslında char tipindeki verilerin yan yana gelmesinden oluşur. Ancak bu verilerin sonlandırılması ve bellekte tutulma biçimi, kullandığınız yönteme göre büyük farklar gösterir.
1. C-Style Strings (Karakter Dizileri)
C dilinden miras kalan bu yapıda metinler, aslında bir char dizisidir (char[]). En önemli özelliği, metnin bittiğini belirtmek için en sona görünmez bir null karakter (\0) eklenmesidir.
C++:
// Tanımlama
char selam[] = "Merhaba"; // Hafızada: 'M','e','r','h','a','b','a','\0'
// İşlem yapmak için <cstring> kütüphanesi gerekir
cout << strlen(selam); // Karakter sayısını verir (null hariç)
2. Modern C++ std::string
C++ standart kütüphanesi ile gelen std::string bir sınıf (class) yapısındadır. Bellek yönetimini otomatik yapar, boyutu dinamiktir ve metin işlemleri için onlarca hazır fonksiyon sunar.
C++:
#include <string>
string isim = "Gemini";
string mesaj = "Merhaba " + isim; // Metin birleştirme çok kolaydır
cout << mesaj.length(); // Uzunluk bulma
cout << mesaj.substr(0, 7); // Alt metin alma (Merhaba)
3. C-Style vs std::string: Temel Farklar
| Özellik | C-Style String | std::string |
|---|---|---|
| Tür | Char dizisi (Düşük seviyeli) | Nesne (Yüksek seviyeli) |
| Boyut | Sabit (Önceden belirtilmeli) | Dinamik (Kendi büyür) |
| Güvenlik | Riskli (Taşma hataları sık olur) | Güvenli (Sınırları yönetir) |
| Birleştirme | strcat() gibi karmaşık fonksiyonlar | + operatörü ile kolayca |
4. Kullanıcıdan Metin Alma (cin vs getline)
std::cin komutu, boşluk karakterini gördüğünde okumayı durdurur. Eğer tam bir cümle almak istiyorsanız getline() kullanmalısınız:
C++:
string tamIsim;
cout << "Adinizi ve Soyadinizi girin: ";
// cin >> tamIsim; // Sadece adınızı alır
getline(cin, tamIsim); // Tüm satırı (boşluklar dahil) alır
cout << "Hos geldin, " << tamIsim;
Sonuç
Modern C++ geliştirirken, çok özel bir performans ihtiyacınız veya donanım kısıtınız yoksa her zaman std::string kullanmalısınız. C-style stringler daha hızlı görünse de, manuel bellek yönetimi nedeniyle hatalara çok açıktır. std::string ise size hem hız hem de güvenlik sunar.