ISO C90 standardının 1. düzeltmesi, geniş karakterleri sınıflandıran işlevler tanımlar. Özgün ISO C90 standardında wchar_t türü tanımlanmışsa da bu tür ile çalışan hiçbir işlev tanımlanmamıştı.
Geniş karakterler için sınıflandırma işlevlerinin genel tasarımı daha geneldir. Daima kullanılabilir olanların dışında kullanılabilir sınıflandırmalar kümesi oluşumlarını mümkün kılar. POSIX standardı oluşumların nasıl yapılacağını belirtir ve bu zaten bir GNU C kütüphanesi gerçeklemesi olan localedef yazılımı ile gerçeklenmiştir.
Karakter sınıfı işlevleri normalde her karakter için bir bit kümesi olmak üzere bit kümeleri ile gerçeklenir. Verilen bir karakter için bit kümesi bir tablodan okunur ve anlamlı bitlerin bir olup olmadığına bakılır. Sınanacak bitler sınıf tarafından belirlenir.
Geniş karakter sınıflandırma işlevleri için bu görünür yapılır. Sınıflandırma türü için bir tür, bir verilmiş sınıf için bu değeri alan bir işlev ve verilen karakterin verilen sınıfa ait olup olmadığını sınıflandırma değerini kullanarak sınayan bir işlev daha vardır. En tepede, char türünden nesneler için kullanılan normal karakter sınıflandırma işlevleri gibi tanımlanmış olabilirler.
Bu kısımda bahsi geçen tüm işlevler aksi belirtilmedikçe
wctype.h başlık dosyasında tanımlanmıştır.
wctype_t bir karakter sınıfına karşılık gelen bir değeri tutabilir. Böyle bir değeri üretmenin tanımlanmış tek yolu wctype işlevini kullanmaktır.
Bu tür wctype.h başlık dosyasında tanımlanmıştır.
wctype_t wctype | (const char *özellik) |
işlev
wctype işlevi özellik dizgesi ile belirtilen bir geniş karakter sınıfını ifade eden bir değer ile döner. Her yerelde tanımlanabilir standart özelliklerin bazıları aşağıda verilmiştir. özellik dizgesi LC_CTYPE kategorisi için seçilen yerelde tanımlanmış isimlerden biri değilse işlev sıfır değeriyle döner.
Her yerelde bilinen özellikler:
Bir karakterin standart dışı sınıflardan birine üyeliğini sınamak için ISO C standardı tamamen yeni bir işlev tanımlar.
int iswctype | (wint_t wc,
wctype_t tanımlayıcı) |
işlev
Bu işlev, wc karakteri tanımlayıcı ile belirtilen sınıfa ait bir karakterse sıfırdan farklı bir değerle döner. tanımlayıcı önceki bir wctype çağrısından dönen değer olmalıdır.
Çok kullanılan sınıflandırma işlevleri kullanımı kolaylaştırmak için C kütüphanesinde tanımlanmıştır. Özellik dizgesi bilinen karakter sınıflarından biriyse bu işlevler için wctype işlevini kullanmaya gerek yoktur. Ancak bazı durumlarda özellik dizgelerinden standart sınıfları elde etmekte önem kazanır.
wc bir alfasayısal karakter (bir harf ya da rakam) ise sıfırdan farklı bir değerle döner. Başka bir ifade ile, iswalpha ya da iswdigit doğru ise iswalnum'da doğrudur.
İşlev,
iswctype (wc, wctype ("alnum"))
kullanılarak da gerçeklenebilir.
wc bir alfabetik karakter (bir harf) ise sıfırdan farklı bir değerle döner. iswlower veya iswupper işlevi doğru ile dönüyorsa iswalpha işlevi de doğru ile döner.
Bazı yereller ne büyük ne de küçük harf olan ve iswalpha işlevinin doğru ile döndüğü ek karakterler içerir. Standart "C" yerelinde böyle bir karakter yoktur.
İşlev,
iswctype (wc, wctype ("alpha"))
kullanılarak da gerçeklenebilir.
wc bir denetim karakteri ise (basılabilir bir karakter değilse) sıfırdan farklı bir değerle döner.
İşlev,
iswctype (wc, wctype ("cntrl"))
kullanılarak da gerçeklenebilir.
wc değişkeninin değeri 0 ile 9 arasında bir rakam karakteri ise sıfırdan farklı bir değerle döner.
| Not |
---|
Bu işlev sadece onluk sistemdeki rakamlar için değil, tüm rakam çeşitleri için sıfırdan farklı bir değerle döner. Bu nedenle aşağıdaki gibi bir kod koşulsuz olarak çalışmayacaktır:
n = 0;
while (iswdigit (*wc))
{
n *= 10;
n += *wc++ - L'0';
}
|
İşlev,
iswctype (wc, wctype ("digit"))
kullanılarak da gerçeklenebilir.
wc bir çizgesel karakter ise sıfırdan farklı bir değerle döner. Çizgesel karakterler, metin ekranında pencere çizmek amacıyla kullanılan karakterler gibi karakterlerdir. Boşluk karakterleri çizgesel karakter değildir.
İşlev,
iswctype (wc, wctype ("graph"))
kullanılarak da gerçeklenebilir.
wc bir küçük harf ise sıfırdan farklı bir değerle döner. Harfin Latin alfabesinden olması şart değildir, herhangi bir alfabeden olabilir.
İşlev,
iswctype (wc, wctype ("lower"))
kullanılarak da gerçeklenebilir.
wc basılabilir bir karakter ise sıfırdan farklı bir değerle döner. Basılabilir karakterler, çizgesel karakterler ile boşluk (' ') karakterinden oluşur.
İşlev,
iswctype (wc, wctype ("print"))
kullanılarak da gerçeklenebilir.
wc bir noktalama işareti ise sıfırdan farklı bir değerle döner. Noktalama işaretleri, alfasayısal ve boşluk olmayan basılabilir karakterlerdir.
İşlev,
iswctype (wc, wctype ("punct"))
kullanılarak da gerçeklenebilir.
wc bir boşluk karakteri ise sıfırdan farklı bir değerle döner. "C" yerelinde iswspace işlevi, sadece
L' ' (boşluk)
L'\f' (sayfa ileri)
L'\n' (satırsonu)
L'\r' (satırbaşı)
L'\t' (yatay sekme)
L'\v' (düşey sekme)
karakterleri için doğrudur. İşlev,
iswctype (wc, wctype ("space"))
kullanılarak da gerçeklenebilir.
wc bir büyük harf ise sıfırdan farklı bir değerle döner. Harfin Latin alfabesinden olması şart değildir, herhangi bir alfabeden olabilir.
İşlev,
iswctype (wc, wctype ("upper"))
kullanılarak da gerçeklenebilir.
wc değişkeninin değeri 0 ile 9 arasında bir rakam karakteri veya A ile F arasında bir büyük ya da küçük harf ise sıfırdan farklı bir değerle döner.
İşlev,
iswctype (wc, wctype ("xdigit"))
kullanılarak da gerçeklenebilir.
GNU C kütüphanesi bunlardan başka, ISO C standardında tek baytlık karakterler için de tanımlanmamış bir işlev daha içerir.
wc bir boşluk ya da sekme karakteri ise sıfırdan farklı bir değerle döner. Bu işlev bir GNU oluşumudur, fakat ISO C99'a da eklenmiştir. wchar.h başlık dosyasında bildirilmiştir.