Merhaba, hoş geldiniz. Bu derste, dizgileri dönüştürme ve biraz daha dizgi işlevleri
hakkında konuşmak istiyorum.
Özellikle karakter büyüklüğünü dönüştürmek çok yaygındır.
Dizenizin tüm karakterlerini büyük harf yapmak istiyorsanız,
neyse ki küçük harften büyük harfe
dönüştüren iki üst işlev ve büyük
harften küçük harfe dönüştüren iki alt işlev
vardır. Yani küçük harften büyüğe, büyükten küçüğe.
Her iki fonksiyon da ya dönüştürülmüş karakteri ya da
zaten doğru durumda olan veya noktalama karakterleri gibi
dönüştürülemeyen karakterler için aynı karakteri döndürür.
Bir dizeyi büyük harfe bu şekilde dönüştürebilirsiniz.
Unutmayın, bunlar aslında karakter bazında
kullanılmaktadır.
Dolayısıyla, bir karakter dizisi olan bir tampon belleğiniz varsa,
tampondaki her bir öğeyi gözden geçirmeniz ve ardından o karakter
üzerinde iki üst işlem yapmanız gerekir.
Burada, tampon karakter
dizimizdeki her bir öğenin üzerinden geçiyoruz
ve bunları iki üst yönteme aktarıyoruz.
Ve bu bir karakter döndürecek, bu bir büyük harf ve bunu buff'larımıza atayacağız.
Bunu null karakterine ulaşana
kadar yapacağız. Yani bu sadece bir satırdan oluşan dört ifadedir.
Bu, dizeyi her seferinde bir karakter
adımlayarak arabellekteki tüm dizeyi büyük harfe dönüştürür.
Döngü, dize sonlandırma karakteri olan ters eğik çizgi sıfıra ulaştığında durur.
char türünün dökümünün orada olmasının nedeni, ASCII değeri olan int türünün
iki üst dönüşüdür ve sadece dönüştürür.
Ve küçük harfe dönüştürmek isterseniz de aynı şeyi yaparsınız, büyük/küçük
harf dönüştürme işlevlerini kullanmak çok basittir.
Böylece, bir dizenin başka bir dizenin içinde geçip geçmediğini bulmak için strstr
işleviyle birlikte two upper işlevini kullanabilirsiniz.
Şimdi tam olarak bunu yapan bu örneğe bakalım.
Burada text ve substring olmak üzere iki karakter dizimiz var.
Metin yüz boyutundadır, alt dize kırk boyutundadır.
Kullanıcıdan aranacak dizeyi yüz karakterden az olacak şekilde girmesini istiyoruz.
Bunu alırız, metin olarak saklarız.
Ve sonra strstr kullanarak bulmak istedikleri dizeyi giriyoruz,
böylece alt dizeyi, yani başka bir alt dizeyi giriyorlar.
Daha sonra ilk dizeyi yazdırırız ve ardından ikinci dizeyi yazdırırız.
Daha sonra her iki dizeyi de büyük harfe dönüştürürüz.
Ve sonra aslında ikinci dizenin ilk dizeyi bulduğunu söyleyebiliriz.
Böylece strstr'yi çağırdığımızda, büyük/küçük
harf durumunu göz ardı edebilir. Çünkü strstr'nin sınırlamalarından birinin büyük/küçük
harfe duyarlı olması olduğunu hatırlayın.
Ve şimdi metin ve alt dizede strstr kullanabiliriz
çünkü hepsi büyük harf karakterleridir.
Ve yine bu, bir alt dizenin tüm dizede
olup olmadığını bulmanın bir yoludur.
İlk olarak, her şeyi büyük harfe dönüştürüyoruz ve şimdi büyük harfleri karşılaştırıyoruz
ve bu programın yaptığı da bu.
Genellikle dizeleri sayılara dönüştürmek istersiniz.
Yani a ile başlayan belirli işlevler vardır.
Atof, atoi, atol ve atoll gibi.
Atoi çok yaygındır, bir dizeyi int'e dönüştürür.
Yani atof bir dizeyi dönüştürecektir ve
ASCII, ASCIItof gibi. Bir dizeyi bir veri türüne dönüştürecektir.
Yani bir atof, ASCII'den float'a veya double'dan float'a dönüştürülür.
Ve belirli geri dönüş değerlerine sahip olabilirsiniz. Bulunamazsa veya yapamazsa.
Bu yüzden bazen dizeleri tam sayıya dönüştüremezsiniz, özellikle de sadece kelimelerden oluşan bir dizeniz varsa.
Genellikle bu fonksiyonu örnekte olduğu gibi kullanırsınız.
98'li bir karakter dizisine sahipseniz. 4, bu bir çift olarak temsil edilebilir.
Böylece üzerinde bir atof yapabilirsiniz. Jason karakter dizisine sahipseniz,
bunu kayan bir tamsayıya dönüştüremezsiniz,
dolayısıyla hiçbir şey olmaz. Dolayısıyla, sayı içeren karakter dizeleriniz olduğunda,
bunları bu ASCIIto işlevlerini kullanarak dönüştürebilirsiniz.
Ve bunların hepsi standart lib başlık dosyasına dahil edilmiştir.
Ayrıca dizelere tamsayılar oluşturmak
için tam tersini göreceksiniz, itoa gibi şeyler göreceksiniz, bu da int'ten ASCII'ye.
Elinizde bir 98 sayısı varsa ve bunu bir dizeye dönüştürmek istiyorsanız, itoa dersiniz.
Ayrıca bazı yeni işlevler de var.
Bunlar özellikle atof'un aksine string
to double içindir.
Bunları strtod veya strtof veya
stringtold olarak kullanabilirsiniz.
Ve her biri ya long doubles floats'a ya da floats doubles'a dönüştürülür.
Ama ikisi de iyi. ASCII olanlar geleneksel olanlardır.
Sanırım diğer strtodlar ve strtoflar daha sonraki c standartlarında eklenmiştir.
İşte bazı dönüşümler yapmanın bir örneği.
Çok, çok basit. Burada bir str karakter dizimiz
var, 3. 5 alan 2. 5 alan 1. 26.
Birkaç ipucumuz var. Ve eğer dönüştüremezsek,
atlayana kadar devam edeceğiz.
Bu yüzden strtod diyoruz. İşaretçimiz olan
ptr adresimizi ve dizemiz olan p dizemizi
iletiyoruz, 3.
5 2. 5.
Şimdi, neden sadece str yerine p str'sini geçirdiğinizi ve buna gerek olmadığını
söyleyebilirsiniz. Ancak burada aslında herhangi bir dönüşüm olup olmadığını
kontrol etmek istiyoruz.
Dönüşüm olup olmadığını kontrol ettiğimiz için her iki işaretçiye de bakmamız gerekir.
Str bir dizi olduğu için ptr'yi str ile karşılaştıramazsınız.
Bu yüzden, karşılaştırma yapabilmek için karakter dizimizi temsil etmek üzere pstr parçasını kullanacağız.
Ve eğer bu ikisini karşılaştırırsak,
pstr'nin hiçbir dönüştürme saklamadığı anlamına gelir ve böylece
işimiz biter. Bu değeri gerçekten dönüştüremedik.
Aksi takdirde, değeri dönüştürebildiysek, sadece yazdıracağız
ve sonra bir sonraki dönüşüme geçeceğiz. Pstar, pointer'a eşit olacak.
Böylece bunu çalıştırabilir ve sonunda dize dizisindeki
her şeyi belirli değerlere, çift değerlere dönüştüreceğini
görebilirsiniz.
Ben genellikle atoi, atof kullanıyorum, ancak bunlardan herhangi
biri de işe yarayacaktır.
Bunlar dönüştürme fonksiyonlarıdır. Teşekkür ederim.