C++ Stringler ile Metin İşleme Örnekleri

C++ Stringler ile Metin İşleme Örnekleri

Bu makalede, C++ dilinde stringler ve karakter dizileri arasındaki farklar ele alınacak ve stringler kullanarak metin işleme örnekleri sunulacaktır Stringler, dinamik olarak çalışabilen bir veri tipidir ve bellek yönetimi otomatiktir Karakter dizileri ise sabit bir boyutta olup bellek yönetimi kullanıcının sorumluluğundadır
Bu makalede, karakter dizilerini sıralama, birleştirme ve ayırma işlemleri ile ilgili örnekler verilecektir Bubble sort algoritması karakter dizilerinin sıralanması için kullanılabilecek bir yöntemdir Karakter dizileri birleştirme işlemi için strcat ve strncat fonksiyonları, ayırma işlemi için strtok ve substr fonksiyonları kullanılabilir
Karakter dizilerinin doğru bir şekilde işlenmesi doğru bellek yönetimi gerektirirken, stringler daha az hatayla daha hızlı işlem yapabilmektedir Bu nedenle, metin işleme işlemlerinde stringlerin kullanımı önerilir C++ dilinde string fonksiyonları

C++ Stringler ile Metin İşleme Örnekleri

C++ programlama dilinde, metinler veya karakter dizileri çok yaygın kullanılır. Bu nedenle, C++ programlamada karakter dizileri ile ilgili örnekler ve uygulamalar önemlidir. Bu makalede, C++ dilinde stringler kullanarak metin işleme örnekleri sunulmaktadır.

Stringler, karakter dizilerinden farklı olarak dinamik olarak çalışabilen özel bir veri tipidir. Stringlerde hafıza yönetimi otomatiktir ve boyutları çalışma zamanında belirlenebilir. Ayrıca, stringlerde karakterlerin eklenmesi, silinmesi ve değiştirilmesi gibi işlemler kolayca yapılabilir.

Bu makalede, C++ dilinde stringler ve karakter dizileri arasındaki farklar ele alınacak ve karakter dizileri ile ilgili sıralama, birleştirme, ayırma işlemleri gibi örnekler sunulacak. Ayrıca, C++ dilinin string kütüphanesi fonksiyonları ve örnek kullanımları hakkında bilgi verilecektir.


Stringler ve Karakter Dizileri

C++ programlama dili ile metin işleme yaparken, genellikle stringler ve karakter dizileri kullanılır. Stringler, karakter dizilerine göre daha gelişmiş ve kullanımı daha kolaydır. Bunun sebebi ise stringlerin std::string kütüphanesi ile birçok kullanışlı fonksiyona sahip olmasıdır. Karakter dizileri ise C dilinde kullanılan bir yapıdır ve C++ dili ile birlikte kullanılabilmektedir.

C++ dilinde stringler ve karakter dizileri arasındaki en önemli fark, stringlerin dinamik bellek yönetimini yapabilmesi ve karakter dizilerinin sabit bir boyutta olmasıdır. Stringlerin boyutu değiştikçe bellek de ayarlanırken, karakter dizilerinde işlem yapmak için sabit bir bellek boyutu ayrılması gerekmektedir.

  • Stringlerin avantajları:
    • Bellek yönetimi string sınıfı tarafından yapılır
    • Daha az hata ile işlem yapılabilir
    • Genellikle daha hızlı işlem yaparlar
  • Karakter dizilerinin dezavantajları:
    • Bellek yönetimi kullanıcının sorumluluğundadır
    • Hata yapma olasılığı daha yüksektir
    • İşlem yapmak için sabit bir bellek boyutuna ihtiyaç vardır

C++ dilinde stringlerin kullanımı, string fonksiyonları ve string kütüphanesi ile birlikte oldukça basittir. Karakter dizileri ise daha fazla dikkat ve doğru bellek yönetimi gerektirir. Bu nedenle, metin işleme işlemlerinde stringler kullanımı önerilir. Daha önceden C dilinde yazılmış bir karakter dizisini C++ dilinde kullanmak için string fonksiyonları kullanılabilir.


Karakter Dizileri İşleme İşlemleri

C++ dilinde karakter dizileri metin işleme için önemli bir araçtır. Karakter dizilerinde sıralama, birleştirme, ayırma işlemleri ve diğer işlemler ile ilgili pek çok örnek verilebilir.

Karakter dizileri sıralamak, metin işleme işlemleri arasında en yaygın yapılan işlemlerden biridir. Bubble sort algoritması sıklıkla kullanılan bir sıralama algoritmasıdır. Bu algoritma, karakter dizisinin önceki elemanını karşılaştırarak işlem yapar ve en büyük elemanı listenin başına taşır.

Bubble sort algoritması, bir liste veya dizi elemanlarını sıralamak için kullanılan bir algoritmadır. Her eleman, kendisinden sonra gelen elemanla karşılaştırılarak sıralama işlemi gerçekleştirilir.

Bubble sort algoritması kullanarak karakter dizilerini sıralamak mümkündür. Aşağıda, bir karakter dizisi sıralama örneği verilmiştir.

Örnek Kod
Karakter dizilerini sıralama char str[] = "C++'da stringler ve karakter dizileri arasındaki farklar"; int n = strlen(str); for (int i = 0; i < n-1; i++) for (int j = 0; j < n-i-1; j++) if (str[j] > str[j+1]) swap(str[j], str[j+1]);

Karakter dizilerinin birleştirilmesi, tek bir karakter dizisi haline getirilmesi için kullanılan bir işlemdir. Birleştirme işlemi, karakter dizilerindeki verileri birleştirerek kaynakta yapılan değişiklikleri değiştirmeden karakter dizilerini güncellemek için kullanılır.

  • strcat(): Bu fonksiyon, iki karakter dizisi birleştirir ve ilk karakter dizisine ekler.
  • strncat(): Bu fonksiyon, iki karakter dizisini ilk karakter dizisinin belirli bir bölümüne ekler.

Karakter dizileri, belirli bir kriter veya işlem sonrasında ayrılabilir. Ayırma işlemi, bir karakter dizisi içindeki belirli verileri elde etmek için kullanılır.

  • strtok(): Bu fonksiyon, bir karakter dizisini belirli bir ayırıcıya göre parçalarına ayırır.
  • substr(): Bu fonksiyon, bir karakter dizisinin belirli bir dilimini alır.

Bu işlemler, metin işleme için sık kullanılan fonksiyonlardır ve C++ dilinde işlemleri gerçekleştirmek için hazır kütüphaneler de mevcuttur. Bu kütüphaneler sayesinde karakter dizileri ile ilgili işlemler, kolayca ve hızlı bir şekilde gerçekleştirilebilir.


Karakter Dizileri Sıralama

Karakter dizileri, belirli bir sıralama dahilinde düzenlenmesi gereken büyük bilgi parçalarının işlenmesinde önemli bir rol oynar. Bu nedenle, karakter dizilerinin sıralanması işlemi de oldukça önemlidir.

Bubble sort algoritması, karakter dizilerinin sıralanması için oldukça popüler bir yöntemdir. Bu algoritma, karşılaştırma yaparak sıralama işlemini gerçekleştirir. Çalışma prensibi, her elemanı sırayla diğer elemanlarla karşılaştırarak, küçük olanın bir önceki pozisyona taşınmasını ve işlem tekrarlanarak en son elemana kadar uygulanmasını içerir.

Algoritma Örnek Kod
Bubble Sort
        void bubbleSort(char arr[], int n) {          int i, j;          for (i = 0; i < n - 1; i++) {            for (j = 0; j < n - i - 1; j++) {              if (arr[j] > arr[j + 1]) {                // swap arr[j] and arr[j+1]                char temp = arr[j];                arr[j] = arr[j + 1];                arr[j + 1] = temp;              }            }          }        }      

Yukarıdaki örnek kodda, 'bubbleSort' fonksiyonu içinde belirtilen dize, karakterlerin eşleştirilmesi için bir döngüde karşılaştırılır. Bu süreç, daha fazla eşleştirme yapılmayana kadar tekrarlanır. Bubble sort algoritması, karakter dizilerinin sıralama işlemlerinde kullanılabilen etkili bir yöntemdir.


Bubble Sort Algoritması

Bubble sort algoritması, sıralama işlemi için kullanılan en basit algoritmalardan biridir. Aynı zamanda zaman karmaşıklığı n^2 olan en yavaş sıralama algoritmasıdır. Bu algoritmanın temel mantığı, elemanları karşılaştırmak ve önceki elemandan daha küçük olanların yerlerini bir sonraki elemanla değiştirmektir.

Bubble sort algoritması kullanarak sıralama yapmak için öncelikle bir dizi oluşturulur ve bu dizi üzerinde sıralama işlemi gerçekleştirilir. Örneğin, aşağıdaki diziyi ele alalım:

  • 5
  • 9
  • 3
  • 1
  • 4

Bubble sort algoritması, dizi boyutu kadar for döngüsü oluşturarak elemanlar arasında karşılaştırma yapar. İlk döngüde ilk elemanla ikinci eleman karşılaştırılır ve büyük olan ikinci elemanın soluna konumlanır. Ardından ikinci ve üçüncü eleman karşılaştırılır ve büyük olan üçüncü elemanın soluna konumlandırılır. Bu işlem, dizi sonuna kadar devam eder ve en büyük eleman dizinin sonuna yerleşir.

Sıralama işlemi halen tamamlanmadı. Bundan sonrasında, dizinin ikinci elemanından başlayarak yine for döngüsü oluşturulur. İkinci eleman, kendisinden önce gelen eleman ile karşılaştırılır ve büyük olan elemanın soluna konumlandırılır. Bu işlem, dizinin sonuna kadar devam eder ve en büyük ikinci eleman dizinin ikinci sırasına yerleşir.

Bubble sort algoritmasının zaman karmaşıklığı n^2 olduğu için büyük boyutlu dizilerde kullanımı önerilmez. Ancak küçük boyutlu dizilerde hızlı ve basit bir sıralama algoritması olarak kullanılabilir.


Karakter Dizilerini Sıralama Örneği

Bu örnekte, karakter dizilerini Bubble sort algoritması kullanarak sıralamayı öğreneceğiz. Bubble sort, iki elemanı karşılaştırarak ve gerekirse yerlerini değiştirerek bir dizi içindeki elemanları sıralayan bir algoritmadır. Öncelikle, kullanacağımız string dizisini tanımlamalıyız.

```c++#include #include

using namespace std;

int main() { string isimler[5] = {"Ali", "Ayşe", "Ömer", "Ezgi", "Burak"};}```

Sıralama işlemini gerçekleştirmek için aşağıdaki fonksiyonu yazabiliriz:

```c++void sirala(string dizi[], int boyut) { for (int i = 0; i < boyut - 1; ++i) { for (int j = i + 1; j < boyut; ++j) { if (dizi[i] > dizi[j]) { swap(dizi[i], dizi[j]); } } }}```

Bu algoritma, "dizi" parametresindeki karakter dizileri arasında karşılaştırma yapacak ve bu karakter dizilerinin yerlerini gerekirse değiştirecektir. Her bir karşılaştırma sonucunda, dizinin en küçük elemanı bir önceki boyutun konumuna yerleştirilecek ve bu işlem, dizi tamamen sıralanana kadar devam edecektir.

Son olarak, main() fonksiyonunda sıralama fonksiyonunu çağırmalı ve sonuçları ekrana yazdırmalıyız.

```c++void sirala(string dizi[], int boyut);

int main() { string isimler[5] = {"Ali", "Ayşe", "Ömer", "Ezgi", "Burak"}; sirala(isimler, 5);

for (int i = 0; i < 5; ++i) { cout << isimler[i] << " "; }

return 0;}```

Bu kodu derlediğimizde, "Ali Ayşe Burak Ezgi Ömer" gibi bir çıktı elde ederiz.

Sonuç olarak, Bubble sort algoritmasını kullanarak karakter dizilerini sıralamak oldukça kolay ve kullanışlıdır. Bu örneğin yanı sıra karakter dizileri üzerinde başka işlemler de yapabilirsiniz ve C++ dilinin string kütüphanesi fonksiyonları hakkında daha fazla bilgi edinebilirsiniz.


Karakter Dizileri Birleştirme

Karakter dizilerinin birleştirilmesi, programlamada oldukça sık kullanılan bir işlemdir. C++ dilinde, karakter dizilerini birleştirmek için farklı yöntemler kullanılabilir. Bunlardan en yaygın olanı, strcat() fonksiyonudur.

strcat() fonksiyonu, iki karakter dizisini birleştirir ve sonuç olarak ilk karakter dizisinin sonuna ikinci karakter dizisini ekler. strcat() fonksiyonunun kullanımı şu şekildedir:

Fonksiyon Açıklama
char *strcat(char *str1, const char *str2) İki karakter dizisini birleştirir ve birinci karakter dizisinin sonunda ikinci karakter dizisini ekler. İşlem sonunda birinci karakter dizisi değişir.

Örnek kullanımı aşağıdaki gibidir:

char str1[20] = "Merhaba ";const char str2[20] = "dünya";strcat(str1, str2);cout << str1; //Çıktı: "Merhaba dünya"

Bunun yanı sıra, + operatörü de karakter dizilerini birleştirmek için kullanılabilir. Örneğin:

char str1[20] = "Merhaba ";const char str2[20] = "dünya";strcat(str1, str2);cout << str1; //Çıktı: "Merhaba dünya"

+ operatörü kullanarak karakter dizilerini birleştirmek için şu kod bloğu kullanılabilir:

string str1 = "Merhaba ";string str2 = "dünya";string str3 = str1 + str2;cout << str3; //Çıktı: "Merhaba dünya"

Yukarıda verilen örnekler, karakter dizilerini birleştirirken hangi yöntemi kullanmanız gerektiğine dair fikir veriyor. Ancak, strcat() fonksiyonunun kullanımı, karakter dizilerinin boyutuna dikkat etmeniz gerektiğinden, bazı durumlarda riskli olabilir. Bu nedenle, özellikle uzun karakter dizileri birleştirecekseniz, + operatörünü kullanmanız önerilir.


Karakter Dizileri Ayırma

C++ karakter dizilerindeki belirli kriterlere göre ayırma işlemleri oldukça kullanışlı ve erişilebilirdir. Bu kriterler, belirli bir string ifadesindeki belirli bir karakterin ya da bir dizi karakterin bulunmasını gerektirebilir. C++ string sınıfında, bir yazı dizisini belirli bir ayraç kullanarak parçalara ayırmak için "find" ve "substr" methodları kullanılabilir.

Bu işlemlerin en yaygın kullanımı, bir dosyanın içeriğinin belirli bir karakter ya da ifade ile ayrıştırılmasında yapılır. Örneğin, bir virgülle ayrılmış liste dosyası içindeki verileri ayırmaya çalışabilirsiniz. Bunun için, find methodunu kullanarak virgülü tespit edebilir ve substr methoduyla verileri parçalayabilirsiniz. İkisini birleştirerek, virgülle ayrılmış her bir veri kolonunu ayrı ayrı elde edebilirsiniz.

  • find() methodu, string ifadesi içinde belirli bir karakteri veya sekansı arar ve bulduğu indeksi döndürür.
  • substr() methodu, belirli bir karakter konumundan başlayarak belirtilen uzunlukta bir alt dize oluşturur.

Aşağıdaki örnek, bir yazı dizisi içindeki belirli bir karakteri arar ve bulduğu konumdan itibaren alt dize oluşturur:

string str = "Merhaba, dünya!";size_t index = str.find(",");if (index != string::npos){  string altStr = str.substr(index + 1);}

Bu örnek, "Merhaba, dünya!" cümlesindeki virgül karakterini bulur ve virgül karakterinden sonra gelen alt dizeyi alır. Bu işlem sonucunda, "dünya!" kelimesini elde edersiniz.

Method Açıklama
find() Belirtilen bir yazı dizisi içinde belirtilen bir karakter veya bir dizi karakter arar ve ilk bulunan indeksi döndürür.
find_first_of() Belirtilen bir yazı dizisi içinde belirtilen karakterlerden herhangi birini arar ve ilk bulunan indeksi döndürür.
find_last_of() Belirtilen bir yazı dizisi içinde belirtilen karakterlerden herhangi birini arar ve son bulunan indeksi döndürür.
find_first_not_of() Belirtilen bir yazı dizisi içinde belirtilen karakterlerden herhangi biri dışındaki ilk karakteri arar ve ilk bulunan indeksi döndürür.
find_last_not_of() Belirtilen bir yazı dizisi içinde belirtilen karakterlerden herhangi biri dışındaki son karakteri arar ve son bulunan indeksi döndürür.

Bu örnekler, C++ karakter dizilerinde belirli kriterlere göre ayırma işlemleri yapmaya yardımcı olur. Bu kriterler, bir dizi karakterin bulunması veya belirli bir karaktere kadar olan alt dizelerdir. Bu işlemler belirli dosya formatlarına uygun olarak bellekteki verileri sıralayabilir ve daha sonra işlenebilir verileri elde edebilir.


C++ String Kütüphanesi

C++ dilinin string kütüphanesi, programcıların metin işleme işlemlerini daha kolay ve hızlı hale getirir. String kütüphanesi, önceden tanımlanmış birçok fonksiyon içerir ve bu fonksiyonlar, metin işleme işlemlerinin çoğunu gerçekleştirmeye yardımcı olur.

Bazı sık kullanılan string kütüphanesi fonksiyonları şunlardır: length(), find(), substr(), replace(), insert(), compare().

Fonksiyon Adı İşlevi
length() Stringin karakter sayısını hesaplar.
find() Belirtilen bir karakter ya da karakter dizisini bulur.
substr() Belirtilen bir aralıkta olan karakterleri keser.
replace() Belirtilen bir aralıktaki karakterleri belirtilen bir karakter ya da karakter dizisiyle değiştirir.
insert() Belirtilen bir aralığa karakter ya da karakter dizisi ekler.
compare() Bir stringin diğer bir stringle karşılaştırılması sonucu boolean değer döner.

String kütüphanesi fonksiyonları, metin işleme işlemlerinde büyük kolaylık sağlar. Bu fonksiyonların kullanımı, programın performansını ve hızını da arttırabilir. Dolayısı ile C++ programlamasında string kütüphanesi fonksiyonlarını öğrenmek ve kullanmak oldukça önemlidir.


String Fonksiyonları Örnekleri

C++ dilinde string kütüphanesi, metin işleme işlemlerinde oldukça kullanışlı fonksiyonlara sahiptir. Bu fonksiyonların kullanımları ve örneklerine bir göz atalım.

  • size() fonksiyonu, bir stringin uzunluğunu bulmak için kullanılır. Örneğin, myString.size() şeklinde kullanılır.
  • substr() fonksiyonu, stringin belli bir aralıktaki karakterlerini seçmek için kullanılır. Örneğin, myString.substr(2,5) şeklinde kullanılır.
  • append() fonksiyonu, bir stringe başka bir string eklemek için kullanılır. Örneğin, myString.append("eklenecek metin") şeklinde kullanılır.
  • replace() fonksiyonu, stringin belli bir aralığındaki karakterleri başka bir string ile değiştirmek için kullanılır. Örneğin, myString.replace(2,5,"degistirilecek metin") şeklinde kullanılır.
  • find() fonksiyonu, bir string içinde belli bir karakter ya da stringin kaçıncı indexte başladığını bulmak için kullanılır. Örneğin, myString.find("ara kelime") şeklinde kullanılır.

Bu fonksiyonlar ve daha pek çok string fonksiyonu, metin işleme işlemlerinde büyük kolaylık sağlar. Kodlama sırasında bu fonksiyonların kullanımı, yapılacak işlemleri kolaylaştırır ve zamandan tasarruf sağlar.


String Parse Etme Örnekleri

C++ dilinde stringlerin parse edilmesi ve parçalanması işlemleri oldukça sık kullanılmaktadır. Bu işlemleri gerçekleştirmek için birçok farklı yöntem ve fonksiyonlar bulunmaktadır.

Örneğin, strtok() fonksiyonu bir stringi belirli bir ayracı kullanarak parçalara ayırır. Bu fonksiyon, verilen bir karakter dizisini delim karakterine göre tokenize ederek, NULL'a kadar olan tüm tokenleri listeler. strtok_s() ise benzer şekilde çalışır ancak daha güvenli bir kullanıma sahiptir.

Öte yandan, stringstream sınıfı, bir stringi istenen karakterlere göre ayırmak için de kullanılabilir. Bu sınıf, bir stringi okumak, veri türlerine dönüştürmek ve ayıklamak için kullanılır. Bu yöntem, belirli bir ayracı kullanmaktan ziyade, stringin içindeki herhangi bir karaktere göre ayırma işlemi yapar.

Bunun yanı sıra, regex kütüphanesi ile de stringler parse edilebilir. Bu kütüphane, belirli bir düzenli ifadeye göre stringi ayıklamak için kullanılır. Bu yöntem, özellikle karmaşık ayrıtma işlemleri için oldukça kullanışlıdır.

Fonksiyon/ Sınıf Kullanım
strtok() char \*strtok(char *str, const char *delim)
strtok_s() char \*strtok_s(char *str, const char *delim, char **context)
stringstream #include <sstream>
stringstream ss(string);
while (ss >> token)
{
   cout << token << endl;
}
regex #include <regex>
regex e ("(\\w+)");
smatch m;
while (regex_search (str,m,e))
{
   for (auto x:m)
      cout << x << " ";
   cout << endl;
}

Yukarıdaki örnekler, C++ dilinde string parse etme ve parçalama işlemlerinde kullanılan en temel yöntemlerdir. Ancak bu işlemler için daha pek çok farklı yöntem ve fonksiyonlar da mevcuttur.


Uygulama: Basit Bir Metin Düzenleyicisi

Bu makalede anlatılan konulardan yararlanarak, C++ dilinde bir metin düzenleyici uygulaması geliştirmek oldukça basit olacaktır. Öncelikle kullanıcının bir metin dosyasını okuyabilmesi için dosya okuma işlemleri yapılmalıdır. Bunun için, fstream kütüphanesi kullanılabilir. Okunan metin dosyası string bir değişkene atandıktan sonra, kullanıcıya değişiklik yapması için bir menü sunulabilir.

Bu menüde, kullanıcının metin dosyasına ekleme, silme ve düzenleme işlemleri yapabilmesi sağlanabilir. Örneğin, kullanıcının belirli bir kelimeyi tüm dosya boyunca değiştirmesi mümkün olabilir. Bunun için, string kütüphanesinin replace fonksiyonu kullanılabilir.

Ayrıca, metin dosyasının belirli bir bölümündeki satırları farklı bir dosyaya kaydetmek mümkün olabilir. Bunun için, string kütüphanesinin substr fonksiyonu kullanılabilir. Bu fonksiyon sayesinde, belirli bir satırdan itibaren belli bir uzunluktaki karakterleri almak mümkün olacaktır.

Metin düzenleyici uygulaması geliştirirken, kullanılacak olan fonksiyonların örnek kullanımlarına da dikkat edilmelidir. Örnek kodlar, kullanıcıların uygulamayı daha iyi anlamasına yardımcı olacaktır.

Metin dosyaları ile çalışırken, dosyanın yapısı önemlidir. Özellikle, belirli bir formatı olan dosyalarda değişiklik yaparken dikkatli olunması gerekir. Örneğin, bir CSV dosyasının belli bir sütunundaki verileri değiştirirken, diğer sütunlardaki verilerin kaybolmaması için doğru yöntemlerin kullanılması önemlidir. Bu nedenle, metin düzenleyici uygulaması geliştirirken, özellikle belirli bir dosya formatında çalışırken daha dikkatli olunmalıdır.