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çimi | Parametreler | Açıklama |
|---|---|---|
find(str) | Alt metin | Metnin tamamında arama yapar |
find(str, pos) | Alt metin + başlangıç konumu | Belirtilen konumdan itibaren arama yapar |
find(char*, pos, count) | C-stil metin + sınır | Belirtilen uzunlukta arama yapar |
std::string::npos | — | Bulunamadığında döner |
❓ Sıkça Sorulan Sorular (SSS)
- 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.
- Tüm eşleşmeleri nasıl bulurum?
Bir döngü içinde find()’ı tekrar çağırın:
pos = metin.find(kelime, pos + 1);
- find() ne döndürür?
Eşleşme varsa konumu (size_t), yoksa std::string::npos döner.
- 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.