Skip to main content

C++ std::string::find() Kullanımı: Metin İçinde Alt Metin Arama Rehberi

🔍 Bu Rehberde Ne Öğreneceksiniz?

Bu rehberde, C++ dilinde bir metin içinde alt metin aramak için kullanılan std::string::find() metodunu öğreneceksiniz.
Ayrıca std::string::npos sabitinin doğru kullanımını ve C-stil metinlerde karakter sınırı belirlemeyi adım adım göreceksiniz.


🧠 Teknik Özet

find() metodu, bir alt metnin (substring) başka bir metin içinde ilk geçtiği konumu döndürür.
Eğer alt metin bulunamazsa, std::string::npos adında özel bir sabit döner.

Söz dizimi:

size_t find(const std::string& aranan, size_t pos = 0);

aranan → Aramak istediğiniz alt metin

pos (isteğe bağlı) → Aramanın başlayacağı indeks (varsayılan 0)

Dönüş → Bulunursa indeks, bulunamazsa std::string::npos


1️⃣ Temel Kullanım: Basit Alt Metin Arama


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

int main() {
string ana_metin = "tr1-node01 rabisu.cloud";
string hedef = "rabisu";

size_t konum = ana_metin.find(hedef);

if (konum != string::npos)
cout << "Bulundu! Baslangic indeksi: " << konum << endl;
else
cout << "Alt metin bulunamadi." << endl;

return 0;
}

💡 Bu örnek, "rabisu" alt metninin ana metin içinde bulunduğu ilk konumu döndürür.


2️⃣ Arama Başlangıcını Belirtmek (pos Parametresi)


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

int main() {
string metin = "Rabisu Bulut hizmeti 2024 Mart'ta yayinlandi.";
string kelime = "Mart";

size_t konum = metin.find(kelime, 10); // 10. karakterden itibaren ara

if (konum != string::npos)
cout << "Bulundu! Konum: " << konum << endl;
else
cout << "Belirtilen aralikta bulunamadi." << endl;

return 0;
}

⚠️ pos parametresi, aramayı metnin ortasından başlatmak için kullanılır. Ancak dönen indeks değeri metnin başından itibaren hesaplanır.


3️⃣ Güvenli Kontrol: std::string::npos

npos, arama başarısız olduğunda dönen özel sabittir. Bu değer, size_t türünün maksimum değeri olup “bulunamadı” anlamına gelir.


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

int main() {
string veri = "API baglanti basarili";
string hata = "HATA";

if (veri.find(hata) != string::npos)
cout << "Hata metni bulundu!" << endl;
else
cout << "Her sey yolunda." << endl;

return 0;
}

✅ Her zaman find() sonucunu npos ile karşılaştırın. Aksi halde geçersiz bir konumla çalışabilirsiniz.

4️⃣ C-Stil Metinler için Karakter Sınırı (count Parametresi)


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

int main() {
string metin = "Rabisu Bulut Hesap";

size_t konum = metin.find("Rabisu Deneme", 0, 6); // sadece ilk 6 karakter: "Rabisu"

if (konum != string::npos)
cout << "Eşleşme bulundu. Konum: " << konum << endl;
else
cout << "Eşleşme bulunamadi." << endl;

return 0;
}

🧩 Bu sürüm yalnızca C-stil dizilerde (char)* geçerlidir. count parametresi, aramanın kaç karakterle sınırlı olacağını belirler.


⚙️ Özet Tablo: find() Kullanımı

Kullanım BiçimiParametrelerAçıklama
find(str)Alt metinMetnin tamamında arama yapar
find(str, pos)Alt metin + başlangıç konumuBelirtilen konumdan itibaren arama yapar
find(char*, pos, count)C-stil metin + sınırBelirtilen uzunlukta arama yapar
std::string::nposBulunamadığında döner

❓ Sıkça Sorulan Sorular (SSS)

  1. find() büyük/küçük harfe duyarlı mı?

Evet. "API" ve "api" farklı kabul edilir. Harf duyarsız arama için tolower() veya transform() kullanılabilir.

  1. Tüm eşleşmeleri nasıl bulurum?

Bir döngü içinde find()’ı tekrar çağırın:


pos = metin.find(kelime, pos + 1);
  1. find() ne döndürür?

Eşleşme varsa konumu (size_t), yoksa std::string::npos döner.

  1. rfind() farkı nedir?

rfind() sondan başa doğru arama yapar ve son eşleşmenin konumunu döndürür.

--

🏁 Sonuç

C++’ta std::string::find() metodu, metin arama işlemlerinin temel yapı taşlarından biridir. Her zaman sonucu std::string::npos ile kontrol edin ve gerekirse rfind() ile sondan arama yapın.

💡 Bu örnekleri Rabisu Bulut üzerinde kendi sanal geliştirme ortamında deneyebilir, C++ metin işleme becerilerinizi güçlendirebilirsiniz.