C++'da dize nasıl bölünür

How Split String C



Dize verileriyle çalışmak, herhangi bir programlama dilinin önemli bir parçasıdır. Bazen programlama amacıyla dizi verilerini bölmemiz gerekir. Split() işlevi, dizeyi birden çok parçaya bölmek için birçok programlama dilinde bulunur. C++'da dizeyi bölmek için yerleşik bir split() işlevi yoktur, ancak aynı görevi yapmak için C++'da birçok farklı yol vardır, örneğin hat almak() işlev, strtok() işlev, kullanarak bulmak() ve sil() işlevler, vb. Bu öğreticide, C++'da dizeleri bölmek için bu işlevlerin kullanımları açıklanmıştır.

Ön koşul

Bu öğreticinin örneklerini kontrol etmeden önce, sistemde g++ derleyicisinin kurulu olup olmadığını kontrol etmelisiniz. Visual Studio Code kullanıyorsanız, yürütülebilir kodu oluşturmak için C++ kaynak kodunu derlemek için gerekli uzantıları yükleyin. Burada, C++ kodunu derlemek ve yürütmek için Visual Studio Code uygulaması kullanılmıştır.







getline() işlevini kullanarak dizeyi bölme

getline() işlevi, belirli bir sınırlayıcı veya ayırıcı bulunana kadar bir dizeden veya dosya içeriğinden karakterleri okumak ve her ayrıştırma dizesini başka bir dize değişkeninde saklamak için kullanılır. İşlev, dize veya dosyanın tam içeriği ayrıştırılana kadar görevi sürdürür. Bu işlevin sözdizimi aşağıda verilmiştir.



Sözdizimi:



istream&hat almak(istream&olduğunu, dize&sokak,karaktersınırlamak);

Burada ilk parametre, isstream, karakterlerin çıkarılacağı nesnedir. İkinci parametre, çıkarılan değeri depolayacak bir dize değişkenidir. Üçüncü parametre, dizeyi çıkarmak için kullanılacak sınırlayıcıyı ayarlamak için kullanılır.





Aşağıdaki kodu kullanarak boşluk sınırlayıcıya göre bir dize bölmek için bir C++ dosyası oluşturun. hat almak() işlev. Bir değişkene birden çok kelimeden oluşan bir dize değeri atanmış ve ayırıcı olarak boşluk kullanılmıştır. Çıkarılan kelimeleri depolamak için bir vektör değişkeni bildirildi. Daha sonra, vektör dizisindeki her değeri yazdırmak için 'for' döngüsü kullanılmıştır.

//Gerekli kitaplıkları dahil et
#Dahil etmek
#Dahil etmek
#Dahil etmek
#Dahil etmek

intana()
{
//Bölünecek dize verilerini tanımlayın
saat::sicimstrData= 'C++ Programlamayı Öğrenin';
//Sınırlayıcı olarak çalışılacak sabit verileri tanımlayın
const karakterayırıcı= '';
// Dizelerin dinamik dizi değişkenini tanımlayın
saat::vektörçıktıArray;
// Dizeden bir akış oluştur
saat::dizi akışıstreamData(strData);
/ *
Kullanılacak dize değişkenini bildirin
Bölündükten sonra verileri depolamak için
* /

saat::sicimsaat;
/ *
Döngü, bölünmüş verileri yineler ve
verileri diziye ekle
* /

süre (saat::hat almak(streamData, val, ayırıcı)) {
çıktıArray.Geri itmek(saat);
}
//Bölünmüş verileri yazdır
saat::maliyet << 'Orijinal dize:' <<strData<<saat::son;
// Diziyi oku ve bölünmüş verileri yazdır
saat::maliyet << ' Dizeyi boşluğa göre böldükten sonraki değerler:' <<saat::son;
için (Oto &saat:çıktıArray) {
saat::maliyet <<saat<<saat::son;
}
dönüş 0;
}

Çıktı:



Yukarıdaki kodu çalıştırdıktan sonra aşağıdaki çıktı görünecektir.

strtok() işlevini kullanarak dizeyi bölme

strtok() işlevi, dizenin bir sınırlayıcıya dayalı kısmını simgeleştirerek bir dizeyi bölmek için kullanılabilir. Varsa, bir sonraki belirteç için bir işaretçi döndürür; aksi takdirde, bir NULL değeri döndürür. NS dize.h Bu işlevi kullanmak için başlık dosyası gereklidir. Bir döngü, dizeden tüm bölünmüş değerlerin okunmasını gerektirir. İlk bağımsız değişken, ayrıştırılacak dize değerini içerir ve ikinci bağımsız değişken, belirteci oluşturmak için kullanılacak sınırlayıcıyı içerir. Bu işlevin sözdizimi aşağıda verilmiştir.

Sözdizimi:

karakter * strtok ( karakter *sokak,const karakter *sınırlayıcılar);

strtok() işlevini kullanarak bir dizeyi bölmek için aşağıdaki kodla bir C++ dosyası oluşturun. Ayırıcı olarak iki nokta üst üste(':') içeren kodda bir karakter dizisi tanımlanır. Daha sonra, strtok() işlev, ilk belirteci oluşturmak için dize değeri ve sınırlayıcı ile çağrılır. NS ' süre ' döngüsü, diğer belirteçleri ve belirteç değerlerini oluşturana kadar tanımlanır. BOŞ değer bulunur.

//Gerekli kitaplıkları dahil et
#Dahil etmek
#Dahil etmek

intana()
{
//Bir dizi karakter bildir
karakterstrArray[] = 'Mehrab Hossain :IT Professional : [e-posta korumalı] :+8801726783423';
//':' temelinde ilk belirteç değerini döndür
karakter *tokenValue= strtok(strArray,':');
// Sayaç değişkenini başlat
inttezgah= 1;
/ *
Belirteç değerini yazdırmak için döngüyü yineleyin
ve almak için kalan dize verilerini bölün
sonraki simge değeri
* /

süre (tokenValue!= BOŞ)
{
Eğer(tezgah== 1)
baskı('Ad : %s ', belirteçDeğeri);
Başka Eğer(tezgah== 2)
baskı('Meslek: %s ', belirteçDeğeri);
Başka Eğer(tezgah== 3)
baskı('E-posta: %s ', belirteçDeğeri);
Başka
baskı('Mobil No. : %s ', belirteçDeğeri);
tokenValue= strtok(BOŞ,':');
tezgah++;
}
dönüş 0;
}

Çıktı:

Yukarıdaki kodu çalıştırdıktan sonra aşağıdaki çıktı görünecektir.

Bul() ve delete() işlevlerini kullanarak dizeyi ayırın

Dize, find() ve delete() işlevleri kullanılarak C++'da bölünebilir. Belirli bir sınırlayıcıya dayalı olarak bir dize değerini bölmek için find() ve delete() işlevlerinin kullanımlarını kontrol etmek için aşağıdaki kodla bir C++ dosyası oluşturun. Belirteç değeri, find() işlevi kullanılarak sınırlayıcı konumu bulunarak oluşturulur ve belirteç değeri, sınırlayıcı, delete() işlevi kullanılarak kaldırıldıktan sonra saklanır. Bu görev, dizenin tam içeriği ayrıştırılana kadar tekrarlanacaktır. Ardından, vektör dizisinin değerleri yazdırılacaktır.

//Gerekli kitaplıkları dahil et
#Dahil etmek
#Dahil etmek
#Dahil etmek

intana(){
// dizeyi tanımla
saat::sicimstringData= 'Bangladeş ve Japonya ve Almanya ve Brezilya';
// Ayırıcıyı tanımlayın
saat::sicimayırıcı= 've';
// Vektör değişkenini bildir
saat::vektörülke{};
//Tamsayı değişkeni bildir
intkonum;
//Dize değişkeni bildir
saat::sicimoutstr, belirteç;

/ *
substr() işlevini kullanarak dizeyi ayırın
ve bölünmüş kelimeyi vektöre ekleyerek
* /

süre ((konum=stringData.bulmak(ayırıcı)) !=saat::sicim::npos) {
jeton=stringData.alt dizi(0, konum);
// Bölünmüş dizenin önündeki fazla boşluğu kaldırın
ülke.Geri itmek(jeton.silmek(0, jeton.find_first_not_of('')));
stringData.silmek(0, konum+ayırıcı.uzunluk());
}
//Sonuncusu hariç tüm bölünmüş kelimeleri yazdır
için (const Oto &dışarı:ülke) {
saat::maliyet <<dışarı<<saat::son;
}
// Son bölünmüş kelimeyi yazdır
saat::maliyet <<stringData.silmek(0, stringData.find_first_not_of('')) <<saat::son;
dönüş 0;
}

Çıktı:

Yukarıdaki kodu çalıştırdıktan sonra aşağıdaki çıktı görünecektir.

Çözüm

Bu öğreticide, yeni python kullanıcılarının bölme işlemini C++'da kolayca gerçekleştirmelerine yardımcı olmak için basit örnekler kullanılarak C++'da bir dizeyi bölmenin üç farklı yolu açıklanmıştır.