Working with Strings

Kategori: C++ , 10 Kasım 2019 , JanFranco


String ifadeler karakter dizileridir. Bu yazımda C++ dilinde string ifadeleri göreceğiz. İlk olarak basit bir program yazalım. Program kullanıcıdan bir isim alsın ve bu ismi kullanarak bir karşılama mesajı konsola yazdırsın:


#include <iostream>
#include <string>

int main() {
    std::cout << "Enter your name: "; // Ask the  name
    std::string name; // Define name
    std::cin >> name; // Read name
    std::cout << "Hello, " << name << "!" << std::endl;
    return 0;
}
Sırayla açıklayalım. String ifade tanımlayabilmek için string kütüphanesini #include ifadesi ile import aldık. Daha sonra kullanıcıdan aldığımız string ifadeyi depolayabilmek için name değişkeni oluşturduk. Bu değişken tanımlandığı anda eğer bir değer belirtilmemişse, değeri null olarak atanır ve null string olarak anılır. Konsoldan aldığımız girdiyi değişkene atayabilmek için cin ifadesini kullandık. Bu operatörü iostream kütüphanesi sayesinde erişebiliyoruz. Son olarak cout operatörü ile kullanıcıdan aldığımız girdiyi "Hello, " yazısıyla birlikte konsola bastırdık.

Burada önemli bir nokta var. Input-output kütüphanesi, outputlarını bir iç veri yapısı olan buffer'a aktarır. Buffer operasyonu güvenlik ve optimizasyon sağlar. Bu veri yapısı daha sonra flush operasyonu ile boşaltılır. Flush operasyonu 3 şekilde gerçekleşebilir, ya veri yapısı tamamen dolmuştur (bu durumda sistem tarafından otomatik olarak flush edilir), ya bir input operasyonu gerçekleşecektir (kullanıcı tarafından) ki bu durumda kütüphane direk buffer'ı flush eder ya da kullanıcı tarafından manuel olarak flush operasyonu istenmiştir. Şimdi bir başka örnek yapalım. Kullanıcıdan aldığımız isim girdisini, etrafında yıldız karakterleri ile birlikte konsol yazdıralım:


#include <iostream>
#include <string>

int main(){
    std::cout << "Please enter your first name: ";
    std::string name;
    std::cin >> name;

    // build the message that we intend to write
    const std::string greeting = "Hello, " + name + "!";

    // build the second and fourth lines of the output
    const std::string spaces(greeting.size(), ' ');
    const std::string second = "* " + spaces + " *";

    // build the first and fifth lines of the output
    const std::string first(second.size(), '*');

    // write it all
    std::cout << std::endl;
    std::cout << first << std::endl;
    std::cout << second << std::endl;
    std::cout << "* " << greeting << " *" << std::endl;
    std::cout << second << std::endl;
    std::cout << first << std::endl;

    return 0;
}
>>
Please enter your first name: Jan

***************
*             *
* Hello, Jan! *
*             *
***************
Burada yeni bir kaç özellik görüyoruz. Bunlardan ilki bir string ifadeyi direk değer vererek tanımlayabiliriz. Burada greeting değerini "Hello, " + name + "!" şeklinde belirledik. String ifadeleri + operatörü ile birleştirebiliriz. + operatörü aynı zamanda toplama işleminde de kullanılıyor. Bu nedenle + operatörü ile yaptığımız string birleştirme işlemi operator overloading'e bir örnektir. Yeni gördüğümüz bir başka özellik const ifadesidir. Const ifadesi, constant kelimesinden gelir, anlamı sabit demektir. Bu ifade ile tanımladığımız değişkenlerin değerini daha sonradan değiştiremeyiz. Program boyunca sabit kalırlar. Bir başka yeni gördüğümüz özellik ise methodlardır: greeting.size() ve second.size(). String bir sınıftır ve sınıflara ait fonksiyonlar olabilir. Bu fonksiyonlara method denir. Son olarak string ifadeleri parantezler ile tanımlayabiliriz. Bu durum aslında obje üretimine bir örnektir. String sınıfının Constructor methodunu kullanarak bir string ifade ürettik. Parantezler içerisine sırasıyla size() methodunu ve '*' karakterini gönderdik. Bu ifade, second stringinin boyutu kadar * karakteri barındıran bir string ifade üret demek oluyor. Son olarak değişken tiplerinden bahsederek yazıyı sonlandıralım:


char:		Built-in değişkendir. Tek bir karakteri tutar.
wchar_t:	Built-in değişkendir. Tek bir bit ile ifade edilemeyece karakterleri de tutabilir (Japonca, Arapça vs.)
string:		string kütüphanesi ile gelen bir veri tipidir.
string tipi ile yapabileceğimiz operasyonlara bakalım:


std::string s;			s adında bir string tanımladık, değeri null.
std::string t = s;		t adında bir string tanımladık, değeri s ile aynı, s stringindeki karakterler t stringine kopyalandı.
std::string z(n, c);		c burada char tipinde bir değişkendir. z adında bir string tanımladık, değeri n değeri kadar c karakteri.
os << s				s stringindeki karakterleri, işletim sistemi tarafından belirlenen output stream'e yazdık.
is >> s				Akıştan gelen girdi değerlerini s string'inin üzerine yazdık. s stringinin eski değeri silindi.
s + t				s stringi ile t stringini birleştirdik.
s.size()			s stringindeki toplam karater sayısını (tam sayı) aldık.	
Üç şekilde değişken tanımlayabiliriz:


std::string hello = "Hello";
std::string stars(100, '*');
std::string name;
Değişkenin değerini direk atayabiliriz. Constructor method ile oluşturabiliriz. Default değeri ne ise (genellikle null) o şekilde de tanımlayabiliriz.


Sonraki Yazı: Looping and Counting
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın