Yükleniyor...

C++ String İşlemleri: C-Style ve std::string

C++’ta C-Style stringler ve std::string kullanımını öğrenin. Metin işleme, birleştirme ve karakter işlemleri örneklerle anlatılıyor.

C++ dilinde metin (string) işlemleri hem klasik C tarzı karakter dizileri (char array) ile hem de modern std::string sınıfı ile yapılabilir. C tarzı diziler düşük seviyeli kontrol sunarken, std::string sınıfı daha güvenli ve kullanışlıdır. Bu makalede metinlerle çalışmanın tüm yönlerini detaylı biçimde öğreneceğiz.


1. C-Style String (char dizileri)

C tarzı stringler, null karakteri ('\0') ile sonlandırılan char dizileridir. Bellekte düz bir karakter dizisi olarak saklanırlar.


#include <iostream>
using namespace std;

int main() {
    char mesaj1[] = "Merhaba";       // Otomatik olarak '\0' eklenir
    char mesaj2[20] = "C++";         // Maksimum 19 karakter + '\0'

    cout << mesaj1 << " " << mesaj2 << endl;
    return 0;
}

C-style stringlerle çalışırken dikkat edilmesi gereken en önemli şey, karakter dizisinin sınırını aşmamaktır. Çünkü C++ bu tür dizilerde otomatik sınır kontrolü yapmaz.


2. strcpy, strcat, strlen, strcmp (C String Fonksiyonları)

C tarzı dizilerle çalışırken <cstring> kütüphanesindeki fonksiyonlar kullanılır:


#include <iostream>
#include <cstring>
using namespace std;

int main() {
    char a[20] = "C++";
    char b[20] = "Programlama";

    // Birleştirme
    strcat(a, " ");        // a = "C++ "
    strcat(a, b);          // a = "C++ Programlama"

    // Kopyalama
    char c[20];
    strcpy(c, a);

    // Uzunluk
    cout << "Uzunluk: " << strlen(a) << endl;

    // Karşılaştırma
    if (strcmp(a, c) == 0)
        cout << "A ve C eşit." << endl;

    cout << "Sonuç: " << a << endl;
}

Bu fonksiyonlar dikkatli kullanılmalıdır çünkü taşma (buffer overflow) riski vardır. Modern C++’ta bunun yerine std::string kullanmak önerilir.


3. std::string Sınıfına Giriş

Modern C++’ta metinlerle çalışmak için <string> kütüphanesi kullanılır. std::string dinamik olarak büyüyebilir, otomatik bellek yönetimi yapar ve zengin fonksiyonlara sahiptir.


#include <iostream>
#include <string>
using namespace std;

int main() {
    string ad = "Ali";
    string soyad = "Yılmaz";
    string tamAd = ad + " " + soyad;

    cout << "Merhaba " << tamAd << endl;
    return 0;
}

std::string türü + operatörüyle kolayca birleştirilebilir ve == ile doğrudan karşılaştırılabilir.


4. Temel String İşlemleri

İşlemAçıklamaÖrnek
Birleştirmeİki string’i birleştirira + b
UzunlukKarakter sayısını döndürüra.length() veya a.size()
Karaktere erişimİndeksle erişima[0], a.at(2)
Alt stringParça almaa.substr(2, 4)
KarşılaştırmaAlfabetik karşılaştırmaa.compare(b)
Boş mu?String boş mu kontrolüa.empty()
Temizlemeİçeriği silera.clear()

string metin = "Programlama";
cout << metin.length() << endl;   // 12
cout << metin.substr(0, 7) << endl; // "Program"

5. Arama, Değiştirme ve Silme İşlemleri

std::string birçok güçlü metin işleme fonksiyonuna sahiptir:


string mesaj = "C++ programlama dili";

// Arama
size_t konum = mesaj.find("programlama");
if (konum != string::npos)
    cout << "'programlama' bulundu, indeks: " << konum << endl;

// Değiştirme
mesaj.replace(4, 11, "modern"); // 4. indexten itibaren 11 karakter değiştir
cout << mesaj << endl; // "C++ modern dili"

// Silme
mesaj.erase(4, 7); // 4. indexten itibaren 7 karakter sil
cout << mesaj << endl; // "C++ dili"

find() aranan metni bulamazsa string::npos döndürür. Bu değer “bulunamadı” anlamına gelir.


6. Karakter Düzeyinde İşlemler

Bir string aslında karakterlerden oluştuğu için döngülerle karakter karakter işlenebilir.


#include <iostream>
#include <string>
using namespace std;

int main() {
    string kelime = "Cplusplus";

    for (char c : kelime) {
        cout << c << " ";
    }

    cout << endl;

    // Büyük harfe dönüştürme
    for (char &c : kelime) {
        c = toupper(c);
    }
    cout << kelime << endl;
}

Karakter dönüşümleri için <cctype> kütüphanesindeki toupper() ve tolower() fonksiyonları kullanılabilir.


7. Dönüştürme İşlemleri (string <→ int, double)

std::string sayısal değerlere dönüştürülebilir veya tersi yapılabilir.


#include <iostream>
#include <string>
using namespace std;

int main() {
    string sayiMetni = "42";
    int sayi = stoi(sayiMetni); // string → int
    double d = stod("3.14");   // string → double

    cout << sayi + 10 << endl; // 52
    cout << d * 2 << endl;     // 6.28

    // int → string
    int yas = 25;
    string yazi = to_string(yas);
    cout << "Yaş: " << yazi << endl;
}

8. Karşılaştırma (compare, ==, <, >)

String’ler hem compare() metodu hem de karşılaştırma operatörleriyle kıyaslanabilir.


string a = "Ali";
string b = "Veli";

if (a == b)
    cout << "Eşit" << endl;
else if (a < b)
    cout << "A alfabetik olarak önce" << endl;
else
    cout << "A alfabetik olarak sonra" << endl;

9. Girdi ve Çıktı İşlemleri

cin sadece ilk boşluk karakterine kadar olan kısmı okur. Eğer bir cümle tamamını almak istiyorsanız getline() fonksiyonunu kullanmalısınız.


#include <iostream>
#include <string>
using namespace std;

int main() {
    string ad;
    cout << "Adınızı girin: ";
    cin >> ad;
    cout << "Merhaba, " << ad << endl;

    cin.ignore(); // önceki girişin sonundaki newline karakterini temizle

    string cumle;
    cout << "Bir cümle girin: ";
    getline(cin, cumle);

    cout << "Girdiğiniz cümle: " << cumle << endl;
}

getline() boşlukları da dahil ederek tam satırı okur.


10. Örnek Uygulama: Metin Analizi

Aşağıdaki örnekte kullanıcıdan alınan bir metinde kelime ve karakter sayısı bulunur.


#include <iostream>
#include <string>
#include <cctype>
using namespace std;

int main() {
    string metin;
    cout << "Bir cümle girin: ";
    getline(cin, metin);

    int karakterSayisi = 0;
    int kelimeSayisi = 1;

    for (char c : metin) {
        if (isalpha(c))
            karakterSayisi++;
        if (c == ' ')
            kelimeSayisi++;
    }

    cout << "Karakter sayısı: " << karakterSayisi << endl;
    cout << "Kelime sayısı: " << kelimeSayisi << endl;
    return 0;
}

11. TL;DR

  • C tarzı stringler: char[] dizileridir, dikkatli kullanılmalıdır.
  • Modern C++’ta std::string sınıfı önerilir.
  • Temel işlemler: +, length(), substr(), find(), replace(), erase().
  • Sayısal dönüşümler için stoi(), stod(), to_string() kullanılır.
  • getline() ile boşluk içeren metinler alınabilir.
  • Tüm örnekler Visual Studio 2022 veya GCC 11+ ortamında çalıştırılabilir.

İlişkili Makaleler