C++ Dize Fonksiyonları: strcpy(), strcat(), strlen(), strcmp()

⚡ Akıllı Özet

C++ `strcpy`, `strcat`, `strlen` ve `strcmp` gibi dize fonksiyonları, programların metni kopyalamasına, birleştirmesine, ölçmesine ve karşılaştırmasına olanak tanır. Bu kaynak, dizenin ne olduğunu, C stili ve `std::string` dizelerinin nasıl tanımlanacağını, değerlerine nasıl erişileceğini ve temel dize fonksiyonlarının örneklerle nasıl uygulanacağını açıklar.

  • 🔤 Temel Tanım: Bir dize, karakterlerden oluşan bir sıradır; C++ `string`, `std::string` sınıfının bir nesnesidir.
  • 🧱 İki Bildiri: C++ '\0' ile sonlandırılan C tarzı karakter dizilerini ve daha güvenli olan std::string sınıf türünü destekler.
  • 📥 Değerlere Erişim: Dizeler isimlerine göre okunur ve yazdırılır; bu işlem hem karakter dizileri hem de std::string ile gösterilmiştir.
  • Dize Fonksiyonları: strcpy dizeleri kopyalar, strcat dizeleri birleştirir, strlen dizelerin uzunluğunu ölçer ve strcmp iki dizeyi karşılaştırır.
  • ???? Başlık Gerekli: C dilindeki dize fonksiyonları, kullanımdan önce dahil edilmesi gereken cstring başlık dosyasında yer alır.

C++ Dize İşlevleri

Dize nedir?

Bir dize, bir karakter dizisidir. A C++ `string`, `std::string` sınıfının bir nesnesidir. Karakterler bayt dizileri olarak saklanır ve tek bir karakter baytına erişime izin verilir.

C++ Dizeler, belleği dinamik olarak tahsis eder. Gerekirse çalışma zamanında dizeye daha fazla bellek tahsis edilebilir. Bellek ön tahsisi olmadığı için bellek israfı olmaz. Dizeler üzerinde karşılaştırma, birleştirme, dönüştürme vb. çeşitli işlemler gerçekleştirebiliriz.

Dizeleri Bildirmek

C++ iki tür dize bildirimini destekler:

  • C tarzı karakter dizisi
  • Dize sınıfı türü

C-Stil Karakter Dizesi

Bu tür dize bildirimi şu tarihte tanıtıldı: C programlama dili. C++ Desteklemeye devam ediyor. Basitçe, bir null karakterle (\0) sonlandırılmış tek boyutlu bir karakter dizisidir. Null ile sonlandırılmış bir dize, dizeyi oluşturan karakterlerin ardından bir null karakteri içerir.

Aşağıda verilen dize bildirimini göz önünde bulundurun:

char name[5] = {'J', 'o', 'h', 'n', '\0'};

Yukarıdaki bildirim, "John" kelimesini oluşturan bir dize oluşturur. Kelime 4 karakterden oluşur, ancak dizenin boyutu 5'tir. Ek boşluk, boş karakteri (null karakteri) tutmak için kullanılır.

Dizi başlatma kuralını kullanarak yukarıdaki ifadeyi aşağıdaki gibi yazabiliriz:

char name[] = "John";

Dize sabitinin sonuna boş karakter (null) koymanız gerekmediğini unutmayın. C++ derleyici, diziyi başlatırken '\0'ı otomatik olarak dizenin sonuna yerleştirecektir.

standart::dize

Standart C++ Bu kütüphane, çeşitli dize işlemlerini destekleyen string sınıfını sağlar. Bu sınıf std::string şeklinde yazılır.

Bu sınıfı kullanabilmek için öncelikle aşağıdaki gibi `#include` önişlemcisini kullanarak çalışma alanımıza dahil etmeliyiz:

#include <string>

Daha sonra string anahtar sözcüğünü kullanarak dizemizi bildirebiliriz. Örneğin:

string name = "John";

Yukarıdaki ifade, John değerini tutacak name adında bir dize yaratacaktır.

Dize Değerlerine Erişim

In C++dize adını kullanarak dize değerlerine erişebiliriz. Örneğin:

#include <iostream>
using namespace std;
int main() {
	char name[5] = { 'J', 'o', 'h', 'n', '\0' };
	cout << "String value is: ";
	cout << name << endl;
	return 0;
}

Çıktı:

Dize Değerlerine Erişim

İşte kodun ekran görüntüsü:

Dize Değerlerine Erişim

Code Açıklama:

  1. iostream başlık dosyasını kodumuza dahil ediyoruz. Konsoldan okumamıza ve konsola yazmamıza olanak tanıyacak.
  2. Sınıflarını ve işlevlerini çağırmadan kullanabilmek için std ad alanını dahil etmek.
  3. Programın mantığının ekleneceği main() fonksiyonunu çağırıyoruz. { işareti, main() fonksiyonunun gövdesinin başlangıcını gösterir.
  4. Bir karakter dizisi bildirmek ve ona ad adını vermek. Dize John değerini saklayacaktır. Ekstra boşluk boş karakteri saklayacaktır.
  5. Konsolda bazı metinlerin yazdırılması.
  6. name isimli stringin değerinin konsolda yazdırılması.
  7. Program düzgün çalışıyorsa main() işlevi bir değer döndürmelidir.
  8. Main() işlevinin gövdesinin sonu.

İşte başka bir örnek C++ standart dize sınıfı:

#include <iostream>
#include <string>
using namespace std;
int main() {

	string name = "Guru99";

	cout << "The name is : " << name << endl;

	return 0;
}

Çıktı:

Dize Değerlerine Erişim

İşte kodun ekran görüntüsü:

Dize Değerlerine Erişim

Code Açıklama:

  1. iostream başlık dosyasını kodumuza dahil ediyoruz. Konsoldan okumamıza ve konsola yazmamıza olanak tanıyacak.
  2. Standart string sınıfını kodumuza dahil etmek.
  3. Sınıflarını ve işlevlerini çağırmadan kullanabilmek için std ad alanını dahil etmek.
  4. Programın mantığının ekleneceği main() fonksiyonunu çağırıyoruz. { işareti, main() fonksiyonunun gövdesinin başlangıcını gösterir.
  5. Bir dize tanımlayıp ona `name` adını veriyoruz. Bu dize, değeri saklayacak. Guru99
  6. Dize adının değerini konsoldaki bir metnin yanında yazdırmak.
  7. Program düzgün çalışıyorsa main() işlevi bir değer döndürmelidir.
  8. Main() işlevinin gövdesinin sonu.

Dize İşlevleri C++

Çoğu zaman dizeleri değiştirmek isteyeceksiniz. C++ Bu amaçla kullanabileceğiniz çok çeşitli işlevler sunar. Bu işlevler şurada tanımlanmıştır: Başlık dosyası olduğundan, fonksiyonları kullanabilmek için kodumuza dahil etmemiz gerekiyor. Şimdi bazılarını ele alalım:

strcpy()

Bu, dize kopyalama işlevidir. Bir dizeyi başka bir dizeye kopyalar.

Sözdizimi:

strcpy(string1, string2);

Fonksiyonun iki parametresi olan string1 ve string2, dizelerdir. Fonksiyon, string2 dizesini string1'e kopyalayacaktır.

strcat()

Bu dize birleştirme işlevidir. Dizeleri birleştirir.

Sözdizimi:

strcat(string1, string2);

Fonksiyonun iki parametresi olan string1 ve string2, birleştirilecek dizelerdir. Yukarıdaki fonksiyon, string2 dizesini string1 dizesinin sonuna ekleyecektir.

strlen()

Bu dize uzunluğu işlevidir. Argüman olarak kendisine iletilen dizenin uzunluğunu döndürür.

Sözdizimi:

strlen(string1);

string1 parametresi uzunluğu belirlenecek olan stringin adıdır. Yukarıdaki işlev string1 dizesinin uzunluğunu döndürecektir.

strcmp()

Bu dize karşılaştırma işlevidir. Dizi karşılaştırması için kullanılır.

Sözdizimi:

strcmp(string1, string2);

Yukarıdaki fonksiyon, string1 ve string2 dizeleri benzer ise 0, string1 < string2 ise 0'dan küçük, string1 > string2 ise 0'dan büyük bir değer döndürür.

Örnek:

Aşağıdaki örnek yukarıdaki dize fonksiyonlarının nasıl kullanılacağını göstermektedir:

#include <iostream>
#include <cstring>
using namespace std;
int main() {

	char name1[10] = "Guru99";
	char name2[10] = "John";
	char name3[10];

	int len;
	strcpy(name3, name1);
	cout << "strcpy( name3, name1) : " << name3 << endl;

	strcat(name1, name2);
	cout << "strcat( name1, name2): " << name1 << endl;

	len = strlen(name1);
	cout << "strlen(name1) : " << len << endl;
	return 0;
}

Çıktı:

Dize İşlevleri C++

İşte kodun ekran görüntüsü:

Dize İşlevleri C++

Code Açıklama:

  1. iostream başlık dosyasını kodumuza dahil ediyoruz. Konsoldan okumamıza ve konsola yazmamıza olanak tanıyacak.
  2. Standart dahil Kodumuzdaki başlık.
  3. Sınıflarını ve işlevlerini çağırmadan kullanabilmek için std ad alanını dahil etmek.
  4. Programın mantığının ekleneceği main() fonksiyonunu çağırıyoruz. { işareti, main() fonksiyonunun gövdesinin başlangıcını gösterir.
  5. 10 karakterden oluşan bir dize tanımlıyoruz ve ona name1 adını veriyoruz. Bu dize, değeri saklayacak. Guru99
  6. 10 karakterlik bir dize bildirmek ve ona name2 adını vermek. Dize John değerini saklayacaktır.
  7. 10 karakterlik bir dize bildirmek ve ona name3 adını vermek.
  8. Bir beyan tamsayı değişkeni len'in adı.
  9. name1 dizesi name3 dizesine kopyalanıyor.
  10. "name3" dizesinin değerini bazı metinlerle birlikte konsola yazdırın. Çıktı şu şekilde olmalıdır: Guru99
  11. name2 dizesini name1 dizesinin sonuna ekliyoruz. name1'in değeri şimdi şu şekildedir: Guru99Yuhanna.
  12. "name1" dizesinin değerini bazı metinlerle birlikte konsola yazdırın. Çıktı şu şekilde olmalıdır: Guru99Yuhanna.
  13. "name1" adlı dizenin uzunluğunu belirleyip, bu uzunluğu "len" değişkenine atamak.
  14. len değişkeninin değerini, diğer bazı metinlerle birlikte konsola yazdırın.
  15. Program düzgün çalışıyorsa main() işlevi bir değer döndürmelidir.
  16. Main() işlevinin gövdesinin sonu.

SSS

Evet. Yapay zeka asistanları, karakter dizilerini std::string'e dönüştürebilir, ilgili fonksiyonları güncelleyebilir ve güvenlik avantajlarını açıklayabilir. Geliştiriciler yine de değişiklikleri uç durumlar, arabellek boyutları ve amaçlanan davranış açısından gözden geçirmelidir.

Evet. Yapay zeka araçları örnek kodlar oluşturur, strcpy ve strcat fonksiyonlarının nasıl davrandığını açıklar ve arabellek taşması risklerini işaretler. Bu, anlamayı hızlandırır, ancak kodu kendiniz çalıştırmak, davranışı doğrulamak için en iyi yöntemdir.

`std::string`, belleği dinamik olarak yönetir ve birleştirme ve karşılaştırma gibi yerleşik işlemler sunar. C tarzı dizeler, '\0' ile sonlandırılan sabit karakter dizileridir, manuel bellek yönetimi gerektirir ve hataya daha yatkındır.

Hedef dizi çok küçükse arabellek taşmalarına neden olabilirler. Daha güvenli alternatifler arasında strncpy, strncat veya belleği otomatik olarak yöneten ve bu riskleri azaltan std::string işlemleri kullanmak yer alır.

Bu yazıyı şu şekilde özetleyin: