1.8 C++ Stringleri (C++ Strings)
C++ dilinde stringler, metin verilerini saklamak için kullanılan veri türleridir. C++'da stringlerle çalışmanın iki ana yolu vardır:
C-Style Stringler (C-İçin Stringler)
std::string
Sınıfı
std::string
Sınıfı
std::string
Sınıfıstd::string
, C++ Standart Kütüphanesi'nin bir parçasıdır ve dinamik olarak büyüyebilen, kolay yönetilebilen ve çok sayıda kullanışlı fonksiyon sunan bir sınıftır.
Örnek:
#include <iostream>
#include <string>
using namespace std;
int main() {
string greeting = "Merhaba, Dünya!";
cout << greeting << endl;
return 0;
}
string sınıfını kullanmak için <string> kütüphanesinin eklenmesi gerekiyor.
String Birleştirme
String birleştirme, iki veya daha fazla stringi bir araya getirmek için kullanılır. C++'da std::string
sınıfı, +
ve +=
operatörleri ile string birleştirmeyi kolaylaştırır.
#include <iostream>
#include <string>
using namespace std;
int main() {
string firstName = "Hüseyin";
string lastName = "Tazegül";
string fullName = firstName + " " + lastName; // "Hüseyin Tazegül"
cout << "Tam İsim: " << fullName << endl;
return 0;
}
+=
Operatörü ile Birleştirme
string greeting = "Merhaba";
greeting += ", Dünya!"; // "Merhaba, Dünya!"
cout << greeting << endl;
Sayılar ve Stringler
C++'da sayılar ile stringler arasında dönüşüm yapmak sıkça gereklidir. Örneğin, bir sayıyı stringe çevirmek veya bir stringi sayıya çevirmek isteyebilirsiniz.
Sayıyı Stringe Çevirme (to_string
)
#include <iostream>
#include <string>
using namespace std;
int main() {
int number = 42;
string strNumber = to_string(number);
cout << "Sayı: " << number << ", String: " << strNumber << endl;
return 0;
}
Stringi Sayıya Çevirme (stoi
, stof
, stod
)
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "12345";
int number = stoi(str); // Stringi integer'a çevirir
cout << "String: " << str << ", Sayı: " << number << endl;
string floatStr = "3.14";
float floatNumber = stof(floatStr); // Stringi float'a çevirir
cout << "String: " << floatStr << ", Float Sayı: " << floatNumber << endl;
string doubleStr = "2.71828";
double doubleNumber = stod(doubleStr); // Stringi double'a çevirir
cout << "String: " << doubleStr << ", Double Sayı: " << doubleNumber << endl;
return 0;
}
String Uzunluğu
Bir stringin uzunluğunu bulmak için length()
veya size()
fonksiyonları kullanılır. Her iki fonksiyon da aynı sonucu verir ve stringdeki karakter sayısını döndürür.
#include <iostream>
#include <string>
using namespace std;
int main() {
string message = "Merhaba, Dünya!";
cout << "Mesaj uzunluğu: " << message.length() << endl; // 15
cout << "Mesaj uzunluğu (size): " << message.size() << endl; // 15
return 0;
}
Stringlere Erişim
Stringler içerisindeki karakterlere erişmek için köşeli parantez ([]
) veya at()
fonksiyonu kullanılır. []
operatörü hızlı erişim sağlar ancak sınır kontrolleri yapmaz. at()
fonksiyonu ise sınır kontrolleri yapar ve hatalı erişimlerde istisna fırlatır.
#include <iostream>
#include <string>
using namespace std;
int main() {
string word = "C++";
// Köşeli parantez ile erişim
cout << "İlk karakter: " << word[0] << endl; // 'C'
// at() fonksiyonu ile erişim
cout << "İkinci karakter: " << word.at(1) << endl; // '+'
// Karakter değiştirme
word[1] = '+';
cout << "Değiştirilmiş kelime: " << word << endl; // "C++"
return 0;
}
Özel Karakterler
Stringlerde özel karakterler kullanmak için kaçış karakterleri (\
) kullanılır. Bu karakterler, yazılması zor veya doğrudan yazılamayan karakterleri temsil eder.
Yaygın Kaçış Karakterleri:
: Yeni satır
: Sekme
\\
: Ters eğik çizgi\"
: Çift tırnak\'
: Tek tırnak
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = "Merhaba,\n\tDünya!";
cout << text << endl;
string path = "C:\\Program Files\\C++";
cout << "Dosya Yolu: " << path << endl;
string quote = "Hüseyin \"C++\" öğreniyor.";
cout << quote << endl;
return 0;
}
Çıktı:
Merhaba,
Dünya!
Dosya Yolu: C:\Program Files\C++
Hüseyin "C++" öğreniyor.
Kullanıcı Girişi ile Stringler
Kullanıcıdan string girişi almak için cin
veya getline()
fonksiyonları kullanılır. cin
, ilk boşluk karakterine kadar olan kısmı alırken, getline()
tüm satırı alır (boşluklar dahil).
cin
ile Kullanıcı Girişi
#include <iostream>
#include <string>
using namespace std;
int main() {
string name;
cout << "Adınızı girin: ";
cin >> name; // İlk boşluğa kadar olan kısmı alır
cout << "Merhaba, " << name << "!" << endl;
return 0;
}
getline()
ile Kullanıcı Girişi
#include <iostream>
#include <string>
using namespace std;
int main() {
string fullName;
cout << "Tam isminizi girin: ";
getline(cin, fullName); // Tüm satırı alır (boşluklar dahil)
cout << "Girdiginiz isim: " << fullName << endl;
return 0;
}
Çoklu Girdi Alma
#include <iostream>
#include <string>
using namespace std;
int main() {
string firstName, lastName;
int age;
cout << "İlk adınızı girin: ";
cin >> firstName;
cout << "Soyadınızı girin: ";
cin >> lastName;
cout << "Yaşınızı girin: ";
cin >> age;
cout << "Merhaba, " << firstName << " " << lastName << "! " << age << " yaşındasınız." << endl;
return 0;
}
String Namespace
std::string
sınıfı, C++ Standart Kütüphanesi'nin std
namespace'i altında tanımlanmıştır. std
namespace'i, standart kütüphane elemanlarını kapsar ve isim çakışmalarını önlemek için kullanılır.
Kullanım Yöntemleri:
Namespace Kapsayıcıları Kullanarak:
#include <iostream>
#include <string>
using namespace std;
int main() {
string message = "Hello, World!";
cout << message << endl;
return 0;
}
std::
Önekini Kullanarak:
#include <iostream>
#include <string>
int main() {
std::string message = "Hello, World!";
std::cout << message << std::endl;
return 0;
}
using
Anahtar Kelimesi ile Namespace Kullanımı
#include <iostream>
#include <string>
using namespace std;
int main() {
string greeting = "Merhaba";
cout << greeting << ", Dünya!" << endl;
return 0;
}
Namespace Alias (Takma Ad) Kullanımı
#include <iostream>
#include <string>
namespace geo = std;
int main() {
geo::string location = "İstanbul";
geo::cout << "Lokasyon: " << location << geo::endl;
return 0;
}
C-Style Stringler
C-Style stringler, karakter dizilerini char
dizileri olarak temsil eder ve null karakter ('\0'
) ile sonlandırılır. Bu yöntem, C dilinden miras alınmıştır ve C++'da da kullanılabilir.
Özellikler:
Sabit veya dinamik boyutlu olabilir.
Standart kütüphane fonksiyonları (
<cstring>
) ile işlenir.Daha düşük seviyeli kontrol sağlar ancak hata yapma olasılığı yüksektir.
Örnek Kullanım:
#include <iostream>
#include <cstring> // C-Style string fonksiyonları için gerekli
using namespace std;
int main() {
// C-Style string tanımlama
char greeting1[] = "Merhaba";
char greeting2[20]; // Boş bir karakter dizisi
// Kopyalama işlemi
strcpy(greeting2, greeting1);
cout << "Greeting2: " << greeting2 << endl;
// Birleştirme işlemi
strcat(greeting2, " Dünya!");
cout << "Birleştirilmiş Greeting2: " << greeting2 << endl;
// Karakter sayısını bulma
int length = strlen(greeting2);
cout << "Greeting2'nin uzunluğu: " << length << endl;
return 0;
}
Yaygın Fonksiyonlar:
strcpy(dest, src)
:src
stringinidest
stringine kopyalar.strcat(dest, src)
:src
stringinidest
stringinin sonuna ekler.strlen(str)
:str
stringinin uzunluğunu döndürür.strcmp(str1, str2)
:str1
vestr2
stringlerini karşılaştırır.
Güvenlik Notları:
C-Style stringler kullanırken, buffer overflow gibi hatalara dikkat etmek gerekir. strncpy
ve strncat
gibi sınırlandırılmış fonksiyonlar kullanarak güvenliği artırabilirsiniz.
Örnek Güvenli Kopyalama:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char src[] = "Güvenli Kopyalama";
char dest[25];
// strncpy kullanarak güvenli kopyalama
strncpy(dest, src, sizeof(dest) - 1);
dest[sizeof(dest) - 1] = '\0'; // Null terminator ekleme
cout << "Kaynak: " << src << endl;
cout << "Hedef: " << dest << endl;
return 0;
}
Last updated
Was this helpful?