1 Nisan 2016 Cuma

locale ve karakterler

Giriş
Şu satırı dahil ederiz.
#include <cctype>
Bu metodlar seçili locale ile çalışır. Eğer belirtilen bir locale ile çalışmak istersek std::ctype facet kullanılır.

Küme Metodları
isalphanum metodu
Şöyle yaparız.
if (isalphanum(chValue)){...}
isblank metodu
Şöyle yaparız.
if (isblank(chValue)){...}
isupper metodu
isupper metodu verilen karakterin büyük olup olmadığını döndürür. Normalde ASCII kullandığımız için kod çok kolaydır ancak locale işin içine girince farklı kodlar yazmak gerekir. Örneğin EBCDIC için kod şöyle bir hal alır.
inline int is_upper_alpha(char chValue)
{
    if (((chValue >= 'A') && (chValue <= 'I')) ||
        ((chValue >= 'J') && (chValue <= 'R')) ||
        ((chValue >= 'S') && (chValue <= 'Z')))
        return 1;
    return 0;
}
ASCII için şöyle olmalıydı
inline int is_upper_alpha(char chValue)
{
    return ((chValue >= 'A') && (chValue <= 'Z'));
}
Bir de locale işin içine girince ortalık daha da karışır. Bu yüzden isupper() metod altta ctype nesnesini kullanarak bizi bu zahmetten kurtarır.

Dönüşüm Metodları
tolower
Metodun imzası şöyle
int std::tolower(int ch); // #include <cctype>
Metoda geçilen parametre unsigned char olarak geçilmeli.
for (char &ch : mystr)
    ch = std::tolower( (unsigned char)ch );
Neden var bilmiyorum ancak locale dosyası içinde de aynı isme ancak farklı imzaya sahip bir metod daha var.
template<typename charT>
charT std::tolower(charT ch, const std::locale& loc);    // #include <locale>


Hiç yorum yok:

Yorum Gönder