Merhaba arkadaşlar!
Bugün sizlerle özellikle yeni başlayanların bir sorunu hakkında konuşacağız.
Bu C ve C++ için geçerli.
Yeni başlayanlar, yani en azından ben yazılıma ilk başladığımda, bu char tipli dizilerde, yani C-style stringlerde nasıl tamamen gezinip tüm elemanları, o dizinin eleman sayısını bilmeden bulabileceğimizi merak etmiştim.
Daha sonra aradan 1 ay geçti ve o eğitimde C++'ın standart kütüphanesine (STL) denk geldim. Tabii, eğitimde tam anlatılmamıştı. String kütüphanesi vs. yoktu.
Daha sonra, bu STL'i biraz araştırırken
Efendim, bugün de sizlere bunu anlatacağım. Nedir bu fonksiyon? Kimin nesidir? C++'taki std::string ile uyumu var mıdır? Veya başka bir implementasyonu? Hadi gelin birlikte bakalım.
Öncelikle fonksiyonumuz, belki de yukarıda da anlayabileceğiniz gibi, strlen() fonksiyonu. Hemen bir kullanımına bakalım. Bu arada, kendisi string.h kütüphanesindedir. Eğer C++ kullanıp C-style string ile iş yapacaksanız <cstring> olarak yazabilirsiniz.
Anlaşılacağı üzere, size_t bir değer döndürüyor ve const char* tipinde verileri parametre olarak alıyor. char[] da alıyor canım, endişelenmeyin.
Örnek kodumuzu yazalım dilerseniz.
Peki C++ style olan std::string karşımıza gelince ne yapacağız? Onda, bu olay daha da basitleştirilmiş.
Evet, şimdi gelelim stringler üzerinde işlem yaparken kullanacağımız for döngüsünün yapısına. O daha da basit. Tahmin edebildiğinizi düşünüyorum az çok.
Veya C++ usulü olan std::string kullanıyorsanız da ortaya şöyle bir şey çıkar.
Yazımı okuduğunuz için teşekkürler!
Bugün sizlerle özellikle yeni başlayanların bir sorunu hakkında konuşacağız.
Bu C ve C++ için geçerli.
Yeni başlayanlar, yani en azından ben yazılıma ilk başladığımda, bu char tipli dizilerde, yani C-style stringlerde nasıl tamamen gezinip tüm elemanları, o dizinin eleman sayısını bilmeden bulabileceğimizi merak etmiştim.
Daha sonra aradan 1 ay geçti ve o eğitimde C++'ın standart kütüphanesine (STL) denk geldim. Tabii, eğitimde tam anlatılmamıştı. String kütüphanesi vs. yoktu.
Daha sonra, bu STL'i biraz araştırırken
strlen()
fonksiyonu gözüme çarptı. GitHub'taki projelerden biraz kullanımına baktım ve anladım. (Zaten adı üstünde bir fonksiyon kendisi ama neyse...)Efendim, bugün de sizlere bunu anlatacağım. Nedir bu fonksiyon? Kimin nesidir? C++'taki std::string ile uyumu var mıdır? Veya başka bir implementasyonu? Hadi gelin birlikte bakalım.
Öncelikle fonksiyonumuz, belki de yukarıda da anlayabileceğiniz gibi, strlen() fonksiyonu. Hemen bir kullanımına bakalım. Bu arada, kendisi string.h kütüphanesindedir. Eğer C++ kullanıp C-style string ile iş yapacaksanız <cstring> olarak yazabilirsiniz.
size_t strlen ( const char * str );
Anlaşılacağı üzere, size_t bir değer döndürüyor ve const char* tipinde verileri parametre olarak alıyor. char[] da alıyor canım, endişelenmeyin.
Örnek kodumuzu yazalım dilerseniz.
C++:
#include <iostream>
#include <cstring> //strlen() fonksiyonumuz burada durmaktadır. C dili için ise string.h kütüphanesidir.
using namespace std;
int main(){
char Cstr[] = "Hello world!";
unsigned int length = strlen(Cstr); /*Bildiğiniz gibi, unsigned int, size_t'ye tekabül eder. (Eğer değiştirilmediyse.) Fakat int olarak ta dönüş değeri bekleyebilirsiniz. Çevirmeyi otomatik yapar.*/
cout<<"Cstr stringinin uzunluğu : "<<length<<" karakter."<<endl;
return 0;
}
Peki C++ style olan std::string karşımıza gelince ne yapacağız? Onda, bu olay daha da basitleştirilmiş.
C++:
#include <iostream>
#include <string> //std::string'in durduğu yer.
using namespace std;
int main(){
string cppstr = "Technopat";
cout<<"Yazdığımız cppstr değişkeninin uzunluğu : "<<cppstr.length()<<" karakter."<<endl;
return 0;
}
Evet, şimdi gelelim stringler üzerinde işlem yaparken kullanacağımız for döngüsünün yapısına. O daha da basit. Tahmin edebildiğinizi düşünüyorum az çok.
C++:
/*
.............
Kodun devamı
.............
*/
for(int i = 0; i < strlen(Cstr); i++){ /*Eğer C++'ta C style string kullanacaksanız, i'yi auto yapabilirsiniz. int te kalabilir, sorun yok. Bazı derleyicilerde uyarı verebilir diye söyledim. Bazı derleyiciler bunun için C++11 standardı parametre isteyebilir. G++ için -std=c++11 yazmanız yetecektir sonuna.*/
/*Çalışacak kod buraya*/
}
/*Kodun devamı...*/
Veya C++ usulü olan std::string kullanıyorsanız da ortaya şöyle bir şey çıkar.
C++:
/*
...........
Kodun devamı
...........
*/
for(auto i = 0; i < cppstr.length(); i++){
/*Kodunuz buraya*/
}
/*Kodun devamı.*/
Yazımı okuduğunuz için teşekkürler!