strtok() İşlevi Nasıl Çalışır?
kullanarak bir dize bölmek için strtok() , önce nasıl çalıştığını anlamanız gerekir. bu strtok() bir sınırlayıcıyla karşılaşana kadar giriş dizesini karakter karakter okur. Bir sınırlayıcı bulunduğunda, strtok() orijinal dizgiyi etkili bir şekilde iki parçaya bölerek boş karakter '\0' ile değiştirir. Ardından işlev tarafından dizenin ilk karakterine bir işaretçi döndürülür. bu strtok() işlevin sözdizimi şöyledir:
strtok ( karakter * str , sabit karakter * paylaşırım ) ;bu strtok() işlev iki bağımsız değişken alır - belirteçler kümesindeki ilk simgeye bir işaretçi ve sınırlayıcı karakterleri tutan bir dize. Son belirteci bölen sınırlayıcıdan hemen sonra başlayan bir sonraki belirteç için bir işaretçi döndürür. Başka belirteç yoksa NULL döndürür.
C Programlamasında Strtok() ile Dizeleri Nasıl Bölebilirim?
İşte nasıl kullanılacağına dair bir örnek strtok() bir diziyi bölmek için:
#include
#include
int ana ( ) {
karakter giriş [ ] = 'Linux,İpucu' ;
karakter * jeton ;
jeton = strtok ( giriş , ',' ) ;
sırasında ( jeton != HÜKÜMSÜZ ) {
printf ( '%S \N ' , jeton ) ;
jeton = strtok ( HÜKÜMSÜZ , ',' ) ;
}
geri dönmek 0 ;
}
Yukarıdaki örnekte, önce bir karaktere bir işaretçi bildiririz. daha sonra kullanırız strtok() giriş dizesini belirteçlere bölmek için. ilk arama strtok() iki bağımsız değişken alır: giriş dizesi ve sınırlayıcı dize ''. İlk belirteç olan 'Linux', strtok() işaretçi olarak döndürür . Daha sonra girdi dizgisini yinelemek için bir while döngüsü kullanırız. strtok() kalan belirteçleri bölmeye devam etmek için bir NULL işaretçisi ile. Ayırıcı dize, tekrar bir argüman olarak iletilir. strtok() sınırlayıcı karakterleri belirtmek için.
Çıktı
Strtok() İşlevinin Sınırlamaları
1: Orijinal Dizgiyi Değiştirir
bu strtok() işlev, dizenin bir kopyasını döndürmez; bunun yerine orijinal dizgiyi değiştirir. Bu nedenle, dizeyi böldükten sonra değiştirilmemiş bir sürümüne ihtiyacınız varsa, çağırmadan önce orijinal dizenin bir kopyasını oluşturmalısınız. strtok() .
2: Eşzamansız
Önemli bir sınırlama strtok() bir seferde yalnızca tek bir dizide kullanılabilmesidir. Başka bir deyişle, aynı anda birden çok diziyi simgelemek için kullanamazsınız.
3: Sınırlı Kapasite
Diğer bir potansiyel sınırlama, strtok() tekrarlanan sınırlayıcıları işlemek için sınırlı bir kapasiteye sahiptir. Örneğin, dizginizde kelimeler arasında ardışık boşluklar varsa, strtok() tek bir sınırlayıcı olarak ele alır. Bu tür durumlarla başa çıkmak için farklı bir yaklaşım kullanmanız gerekecek.
Çözüm
bu strtok() işlevi, C programlamasında dizeleri bölmek için çok kullanışlı bir işlevdir. Bir giriş dizesi ve bir sınırlayıcı dize alır ve giriş dizesinde bulunan ilk simgeye bir işaretçi döndürür. strtok() yıkıcıdır, bu nedenle, orijinal dizinin bütünlüğünü korumanız gerekirse, bunun yerine onun bir kopyasını oluşturmanız önerilir. Artık nasıl yapacağınızı bildiğinize göre, işlemek için herhangi bir ipi daha küçük parçalara ayırabilirsiniz.