strlen() Fonksiyonu Kullanmadan Cumle Uzunluğunu Bulmak

UmpaLumpalar

Centipat
Katılım
8 Ocak 2022
Mesajlar
72
Daha fazla  
Cinsiyet
Erkek
Merhaba arkadaşlar. Girilen cümlenin kaç karakterden oluşturduğunu hesaplamaya çalışan kodu yazmaya çalışıyorum.
C++:
string cumle;
    cout << "Bir cumle giriniz: "; cin >> cumle;
   
    int sayac = 0;

    for (int i = 0; cumle[i] != '\0'; i++)
    {
        sayac += 1;
    }
   
    cout << sayac << endl;
Bu programı çalıştırıp , string olarak "merhaba" girersem sayaç 7 karakter okuyor. Buraya kadar bir sorun yok. Ama 'merhaba dunya' yazınca sayaç yine 7 okuyor. Bunun sebebi tam olarak nedir. '\0' ifadesi tam olarak nerelere geliyor. Yani kısaca strlen() fonksiyonunu kullanmadan cümle uzunluğunu bulan kodu yazmamda yardımcı olur musunuz?
 
cin >> x;
Kullandığınızda basitçe string'e bir kelime almış(başlangıç ve bir boşluğa kadar, sizin örneğinizde "merhaba" kısmı) oluyorsunuz).

Tüm cümleyi boşluklarla beraber string'e almak için getline() fonksiyonu kullanabilirsiniz.

Şu şekilde:

C++:
std::string cumle;
std::getline(cin, cumle);

Ayrıca using namespace std kullanmak daha kolay olsa da böyle alışmamanızı tavsiye ederim. Karışıklık yaratabilir.

Edit:
Yazmayı unutmuşum, '\0' normalde C'deki stringlerin (char array ile yaptığınız) sonunu belirtmek için kullanılır. Ancak bunun C++'deki std::string'i C'dekinden farklı, sizin kodunuzun çalışabilmesinin sebebi C++'daki string kütüphanesinde stringinizi C string'i olarak değerlendiren fonksiyonlar olması. Benim tavsiyem boyut fonksiyonu olan size'i kullanmanız. Şöyle:
for (int i = 0; i < cumle.size(); i++)
 
Son düzenleme:
cin >> x;
Kullandığınızda basitçe string'e bir kelime almış(başlangıç ve bir boşluğa kadar, sizin örneğinizde "merhaba" kısmı) oluyorsunuz).

Tüm cümleyi boşluklarla beraber string'e almak için getline() fonksiyonu kullanabilirsiniz.

Şu şekilde:

C++:
std::string cumle;
std::getline(cin, cumle);

Ayrıca using namespace std kullanmak daha kolay olsa da böyle alışmamanızı tavsiye ederim. Karışıklık yaratabilir.
Çok teşekkür ederim. Tavsiyenizi dikkate alacağım :)
 

Technopat Haberler

Geri
Yukarı