Tavsiye, 2024

Editörün Seçimi

Karakter Dizisi ve Dize Arasındaki Fark

C ++, hem karakter dizisini hem de dizeyi destekler, çünkü C ++ ikisinin de kullanımında kayda değer faydalar sağlar. Ancak, karakter dizisinde çalışamama, sınıf dizgisinin gelişimini arttırır. Hem bir karakter dizisi hem de dizge karakter dizisini içerir. Ancak karakter dizisi ile karakter dizisi arasındaki temel fark, “karakter dizisi” nin standart işleçlerle çalıştırılamaması, “dizge” nesnelerinin standart işleçlerle çalıştırılmasıdır. Bir karakter dizisi ve dize arasındaki diğer farkları inceleyelim.

Karşılaştırma Tablosu

Karşılaştırma için temelKarakter Dizisisicim
TemelKarakter dizisi, karakter veri tipindeki değişkenlerin toplanmasıdır.Dize sınıfıdır ve dizenin değişkenleri "string" sınıfının nesnesidir.
Sözdizimichar dizi_adı [boyut];string string_name;
indekslemeBir karakter dizisindeki tek bir karaktere, dizindeki dizini tarafından erişilebilir.Dizgede belirli karakterlere "string_name.charAt (index)" fonksiyonu ile erişilebilir.
Veri tipiBir karakter dizisi veri tipini tanımlamaz.Bir dize, C ++ 'da veri türünü tanımlar.
OperatörlerC ++ işleçleri karakter dizisine uygulanamaz.Dize standart C ++ operatörü uygulayabilirsiniz.
SınırDizi sınırları kolayca aşılır.Sınırlar aşılmaz.
ErişimHızlı erişim.Yavaş erişim.


Karakter Dizisinin Tanımı

Bir karakter dizisi “char” datatype değişkenlerinin bir koleksiyonudur; tek boyutlu bir dizi veya iki boyutlu bir dizi olabilir. Ayrıca “boş sonlandırılmış dize” olarak da adlandırılır. Karakter dizisi, ardışık hafıza adreslerinde saklanan karakterlerin bir dizisidir. Bir karakter dizisinde, belirli bir karakterin dizinine erişilebilir. Bir “Null karakter” karakter dizisini sonlandırır ”.

Bir karakter dizisi örneği alalım: -

 karakter adı [] = {'A', 'j', 'a', 'y', '\ 0'}; veya char adı [] = "Ajay"; 

Burada “char” bir karakter veri türüdür, “name”, karakter dizisinin değişken bir adıdır. Karakter dizisini başlatmak için iki yol göstermiştim. İlk yöntemde boş değer açıkça belirtilir ve ikinci yöntemde derleyici boşluğu otomatik olarak ekler.

Dizenin sonu daima boş bir karakterdir; karakter dizisinin bitiş karakteridir. Bir karakter dizisi, yerleşik bir veri türü değildir; ilan ederek karakter dizisi yaratıyoruz. Standart işleçleri karakter dizisine uygulayamazsınız. Karakter dizisi üzerinde çalışmak için, (strlen (), strlwr (), strupr (), strcat ()) gibi bazı yerleşik işlevler vardır. Standart operatörler bir karakter dizisine uygulanamadığından, hiçbir ifadede yer alamazlar.

Bir karakter dizisine karakter işaretçisi de oluşturulabilir.

Bunu bir örnekle anlayalım.

 char s1 [] = "Merhaba"; char s2 [] = "Efendim"; s1 = s1 + s2; // hata işleçleri uygulanamaz s2 = s1; // hata Karakter işaretçisi char * s = "Sabah"; char * p; p = s; // yürütür 

Yukarıdaki örnekte, iki karakter dizisi s1, s2 ve iki karakter işaretçisi s ve p olduğunu açıklamıştık. S1 ve s2 karakter dizileri başlatıldı, ne toplama operatörünün (+) ne de atama operatörünün karakter dizisi üzerinde çalıştığını görmüyoruz. Ancak bir karakter imleci başka bir karakter imlecine atanabilir.

Karakter dizisi başlatıldıktan sonra, başka bir karakter dizisine tekrar başlatılamayacağını unutmayın. Bir karakter dizisine veya boş sonlandırılmış bir dizeye erişim, C ++ 'daki dize ile karşılaştırıldığında hızlıdır.

String tanımı

Bir dize, yerleşik bir C ++ veri türü değildir. "String" türünde bir sınıf nesnesi. C ++ 'da olduğu gibi, bir sınıf oluşturmak tıpkı bir “tip” yaratmak gibidir. “String” sınıfı C ++ kütüphanesinin bir parçasıdır. Karakter kümesini veya karakter dizisini bir bütün olarak tutar. Standart bir string sınıfın geliştirilmesinin ardında üç neden vardır.

  • Birincisi “tutarlılık”, karakter dizileri kendi başlarına veri türleri değildir.
  • İkincisi “uygunluk”, standart operatörleri bir karakter dizisinde kullanamazsınız.
  • Üçüncüsü “güvenlik” tir, dizi sınırları kolayca aşılır.

Dizeleri bir örnekle anlayalım.

 s1 dizgisi; s1 = "Merhaba"; s2 dizisi ("Günaydın"); s3 dizisi = "Hennery"; s4 dizisi; 

Yukarıdaki açıklamada, dört dizi değişkeni veya nesne (s1, s2, s3, s4) bildirildi. Yukarıdaki açıklamada, dizgeyi başlatmanın üç yolunu göstermiştim. S1 dizgisi ilan edilir ve ardından ayrı ayrı başlatılır. S2 dizisi “String” sınıfının kurucusu tarafından başlatıldı. S3 dizgisi, bildirimi sırasında normal veri tipinin yaptığı gibi başlatılır. Standart işleci dizge değişkenlerine uygulayabiliriz.

 s4 = s1; // bir dize nesnesini diğerine atama s4 = s1 + s2; // iki dizge ekleyerek ve sonucu üçüncü dizgede saklar eğer (s3> s2) // iki dizgiyi karşılaştırarak s5 (s1); Mevcut dize nesnesini kullanarak yeni bir dize nesnesi oluşturma 

Yukarıdaki kodda, bir dizgede çeşitli operatörler uygulanır ve çeşitli işlemler gerçekleştirilir. İlk ifade, bir dize nesnesini başka bir dize nesnesine kopyalar. İkinci ifadede, iki dize birleştirilir ve üçüncü bir dizede saklanır. Üçüncü ifadede, iki dize karşılaştırılmıştır. Dördüncü ifadede, zaten var olan dize nesnesi kullanılarak yeni bir dize nesnesi oluşturulur.

Dizeye erişim, bir karakter dizisine veya boş sonlandırılmış dizeye kıyasla yavaş.

Karakter Dizisi ve Dize Arasındaki Anahtar Farklılıklar

  1. Bir karakter dizisi, karakter veri tipinde olan bir değişkenler topluluğudur. Dize, dizeleri bildirmek için başlatılan bir sınıftır.
  2. Dizin değerini kullanarak bir karakter dizisinden bir karaktere erişebilirsiniz. Öte yandan, bir dizgede belirli bir karaktere erişmek istiyorsanız, dizgenin_adı.charAt (index) fonksiyonuyla erişebilirsiniz.
  3. Bir dizi bir veri türü olmadığından benzer şekilde bir karakter de bir veri türü değildir. Öte yandan, String bir sınıf olduğu için referans tipi olarak hareket eder, dolayısıyla String'in bir veri tipi olduğu söylenebilir.
  4. Herhangi bir işleci karakter dizisine uygulayamazsınız, oysa String işlecini uygulayabilirsiniz.
  5. Bir dizi karakter dizisi olmak, sabit bir uzunluğa sahiptir ve sınırları kolayca aşılabilir. String'in sınırları olmadığı yerde.
  6. Dizi öğeleri bitişik bir bellek konumunda saklanır, bu nedenle dize değişkeninden daha hızlı erişilebilir.

Sonuç:

Karakter dizisinde çalışamama standart string sınıfının gelişimini arttırdı.

Top