Bildiğimiz gibi string(dizi) birden fazla karakteri hafızada tutmaya yarayan bir değişken tipidir. String parçalama, birleştrime, istenilen harfi bulma/silme/değiştirme gibi özellikler sıkça kullanılmaktadır.
İlk olarak bir string nasıl tanımlanır buna bakacak olursak;
String değişkenadı = “değişken içeriği”
1 2 |
String ornek = "Naber"; String yazi = "MikroCore"; |
***Dikkat edilmesi gerek yazım kuralı olarak değişken tipi olan String yazarken baş harfinin büyük olmasıdır. Aksi halde derlenirken “error: ‘string’ does not name a type” içerikli hata ile karşılaşırsınız.
String Index Numarasını Nedir
Index demek bir kelimede bulunan harfin kaçıncı konumda olduğudur. Program index numaralandırmaya 0 dan başlar.
Örneğin “Atatürk” kelimesinin;
0. Index = ‘A’,
1. Index = ‘t’,
2. Index = ‘a’,
3. Index = ‘t’,
4. Index = ‘ü’,
5. Index = ‘r’,
6. Index = ‘k’
String Boyutunu Öğrenmek
String boyutunu öğrenmek için tanımlanan String değişkeninin sonuna .length() foksiyonu eklenir.
Örnek;
1 2 |
String deneme = "Onur"; Serial.print(deneme.length()); |
Program çalışıtığı anda seri port ekranında “4” yazacaktır. Size String değişkeninizin uzunluğunu verir.
String İçerisinde İstenilen Index Karakterini Bulmak
String içerisinde belirli bir Indexin kontrolünü yapmanız veya o Indexi öğrenmeniz gerekiyor. Bunun için .charAt(Index No) fonksiyonu ile istediğiniz Index numarasını göndererek o Indexde ki karakteri bulmanızı sağlar.
1 2 3 4 |
String onur = "abcdefg"; Serial.print(onur.charAt(0)); Serial.print(onur.charAt(3)); Serial.print(onur.charAt(5)); |
Programı incelersek seri port ekranından sırayla 0, 3, 5 nolu Index de bulunan harfleri gönderecektir.
a b c d e f g
0 1 2 3 4 5 6
0. Index = ‘a’,
3. Index = ‘d’,
5. Index = ‘f’
Dolayısıyla Seri port ekranında yanyana ace yazacaktır.
***String uzunluğu 5 karakter olsun. Ancak biz String uzunluğunu bilmiyoruz. Son karakter Indexi 4 olacaktır. Biz 5. Index numarasını fonksiyona gönderdik. Bize hiçbir cevap dönmez.
String İçerisinde İstenilen Karakterin Index Numarasını Bulmak
Bu fonksiyonda bir önceki istenilen Indexin karakterini bulmanın tam tersidir. İstenilen harfi gönderiyoruz sonuç olarak da o karakterin Index numarası dönüyor. Bu işlemi .indexOf(‘karakater’) fonksiyonu ile yapıyoruz.
1 2 3 4 |
String test = "Program"; Serial.print(test.indexOf('P')); Serial.print(test.indexOf('g')); Serial.print(test.indexOf('m')); |
P r o g r a m
0 1 2 3 4 5 6
Program çıktısında
P karkaterinin Index Numarası = 0,
g karkaterinin Index Numarası = 3,
m karkaterinin Index Numarası = 6
Seri port ekranında 036 çıktısını görülecektir.
***Bu fonksiyonda dikkat edilmesi gerekenler;
“Program” yazısında iki adet r harfi bulunmaktadır. test.indexOf(‘r’) komutunu gönderseydik cevap ne dönecekti? ‘r’ harfi hem 1 hemde 4 numaralı indexde bulunmaktadır. indexOf() foksiyonu karakter bulma işini for döngüsü ile yapmaktadır. Sırayla Index numaralarını kontrol eder. Karakteri bulduğu anda döngüden çıkarak karakteri bize gönderir. Dolayısıyla bulduğu karakterden sonraki karakterleri kontrol etmez. Yani sonuç 1 dönecektir.
1 2 3 |
Serial.print(test.indexOf('a')); Serial.print(test.indexOf('b')); Serial.print(test.indexOf('s')); |
Program bu şekilde çalıştırılsaydı;
a karakterinin Index Numarası = 5,
b karakterinin Index Numarası = yok,
s karakterinin Index Numarası = yok
Fonksiyon karakteri bulamaz ise sonuç olarak “-1” değeri dönderir.
String İçerisinde Belirli Indexler Arasını Almak
Bu fonksiyon benim en çok kullandığım özellikle Seri port ile iletişim yapıldığında olmazsa olmaz bir fonksiyondur. Bu fonksiyon ile String içeriğinin istediğimiz kısmını alabiliriz. Bu işlemi gerçekleştiren komut .substring(Başlangıç, Index, BitişIndex) fonksiyonudur.
1 2 |
String test = "Merhaba"; Serial.print(test.substring(0,2)); |
M e r h a b a
0 1 2 3 4 5 6
***Komut Başlangıç Indexini dahil eder, Bitiş Indexini dahil Etmez. Yani 0 ve 1 Nolu Indexleri alarak Seri port ekranına “Me” çıktısını yazar.
Bir kaç örnek vermek gerekirse;
1 2 3 4 5 6 7 8 |
String test1 = "MikroCore"; Serial.println(test1.substring(0, 5)); // "Mikro" String test2 = "Merhaba"; Serial.println(test2.substring(3, 7)); // "haba" String test3 = "Nasilsin"; Serial.println(test3.substring(2, 5)); // "sil" |
Diyelim ki değişkenimize Seri portdan veri geliyor ancak biz bu verinin uzunluğunu bilmiyoruz. Sadece sondaki 2 karakteri silmek istiyoruz. Bunun için
.substring(0, son karakter-2) şeklinde bir komut yazmamız gerek. Örnek ile incelersek;
1 2 3 |
String test = "veri01"; test = test.substring(0, test.length() - 2); Serial.println(test); |
test adlı değişkenimizin içeriği “veri01” biz bu “01” kısımını silmek istiyoruz.
1 |
test = test.substring(0, test.length() - 2); |
komutu ile “veri01” karakterlerinin 0. Indexinden son – 2 yani 5-2 = 3. Indexine kadar olan kısım alınıp tekrar test adlı değişkene atanmıştır.
test içeriği “veri01” den düzenlenip “veri” olarak ekrana yazdırılmıştır.
Merhaba eline koluna sağlık. Harika açıklamış sın. Birçok boş kitap yazarından iyisin.
Teşekkürler açıklamalarınız çok güzel, sorunumu çözmeme yardımcı oldunuz.