|
String' den Integer' a Dönüşüm |
|
Gönderiliyor lütfen bekleyin... |
|
|
Geçen yazımızda, integer veri tipini string veri tipine dönüştürmeyi incelemiştik.
Söz verdiğimiz üzere bu yazımızda da, bu işlemin tersini, yani string’den integer’a dönüşümü inceleyeceğiz.
Fonksiyonlarımızın imzaları şöyle olacak:
int StrToInt(const char*);
UINT StrToUint(const char*);
|
Kullanımlarına bakarsak:
int i = StrToInt(“-74374”);
UINT u = StrToUint(“897263”);
|
Fonkiyonlarımızın çalışabilmesi için iki makroya da ihtiyacımız olacak. Bunlardan ilki _ISSPACE
verilen bir karakterin boşluk grubuna ait olup olmadığını test ediyor.
Biz bu makroyu, verilen string’i trimlemek için kullanacağız.
İkinci makromuz ise _ISDIGIT. Bu makro da verilen bir karakterin sayısal bir karakter olup olmadığına bakıyor.
#define _ISSPACE(c)\
((0x09<=(c)&&(c)<=0x0d)||(c)==0x20)
#define _ISDIGIT(c)\
(’0’<=(c)&&(c)<=’9’)
|
Şimdi dilerseniz fonksiyonlarımıza geçelim. Öncelikle StrToInt fonksiyonu:
int StrToInt(const char* pz)
{
while (_ISSPACE(*pz))
++pz;
int nSign;
if (*pz == ’-’) {
++pz;
nSign = -1;
} else {
if (*pz == ’+’)
++pz;
nSign = +1;
}
int nAccum = 0;
char c;
while (c = *pz++, _ISDIGIT(c))
nAccum = nAccum * 10 + (c - ’0’);
return nSign * nAccum;
}
|
Ve StrToUint fonksiyonu:
UINT StrToUint(const char* pz)
{
while (_ISSPACE(*pz))
++pz;
char c = *pz++;
if (c == ’-’ || c == ’+’)
c = *pz++;
UINT uAccum = 0;
while (_ISDIGIT(c)) {
uAccum = uAccum * 10 + (c - ’0’);
c = *pz++;
}
return uAccum;
}
|
Dönüşüm işleminin mantığını biraz inceleyelim. Her iki fonsiyon da temelde aynı yöntemi kullanıyorlar.
Fakat farklı olarak StrToInt fonksiyonu, girilen string’in önünde ‘-’ veya ‘+’
karakterlerinin varlığını kontrol ediyor. Ortak olan işlem ise…
uAccum = uAccum * 10 + (c - ’0’);
|
… ifadesinde saklı. Bu basit ifade, string verisinin her karakterinin Ascii tablosundaki değerinden 48 çıkartıp,
sonucu herseferinde 10 ile çarpılan uAccum değişkenine eklemek. Bu işlem, sayısal olmayan (örneğin null/terminator)
bir karaktere rastlanıncaya kadar devam ediyor, hepsi bu…
Özetleyecek olursak, string ve integer veri tipleri arasındaki dönüşüm,
kullanıcı arayüzü olan uygulamaların bir çoğunda kullanılmaktadır. Peki bu dönüşümleri VC++ Runtime fonksiyonları
yerine kendi kendimize niçin yapıyoruz? Buna yanıtımız daha sade, daha hızlı program yazma isteğimiz ve en önemlisi
merakımızdır diyebiliriz.
Eylem Uğurel
[email protected]
Makale:
String' den Integer' a Dönüşüm C++ ve C++.NET dili Eylem Uğurel
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|