C'de girilen verinin data türünü bulma

Katılım
4 Ağustos 2015
Mesajlar
1.894
Makaleler
6
Çözümler
12
C'de girilen bir stringin icerisindeki elemanlarin hangi data type'ta oldugunu bulan bir program yazmaya calisiyorum.
Mesela "a123+#." gibi bir girdi girince sonucta:
0.eleman char 'a'
1.eleman integer '123'
2.eleman char '+'
3.eleman char '#'
4.eleman char '.'
yazmasi gerekiyor. En sonunda da .,!@#az gibi herhangi bir char varsa flag=1; ile belirtmesi lazim. Ilgili stackoverflow konusuna yonlendirirseniz cok sevinirim. Tabii buraya yazip aciklarsaniz cok daha guzel olur.
 
Galiba bunu yapmak için ANSII kodları gerekiyor. Her karakterin koduna göre ayrışım yapabilir. Girilen karakterin, koşul durumuna bağlı olarak, adresteki verinin ANSII kodu belirler. Bununla ilgili büyük harf-küçük harf bilgisiyle ilgili bir şey denemiştim, yine öyle olabilir.

ascii-nedir.jpg


Buradaki decimal değerleri ile olur.
 
Almış olduğun string deki karakterleri bir döngü içerisinde dönüp, sonrasında her karakter için
C:
if( isdigit(karakter) ) { // Karakter numeric mi ?
    flag = 1;
} else {
   flag = 0;
}
şeklinde yapılandırabilirsin.
 
C'de girilen bir stringin icerisindeki elemanlarin hangi data type'ta oldugunu bulan bir program yazmaya calisiyorum.
Mesela "a123+#." gibi bir girdi girince sonucta:
0.eleman char 'a'
1.eleman integer '123'
2.eleman char '+'
3.eleman char '#'
4.eleman char '.'
yazmasi gerekiyor. En sonunda da .,!@#az gibi herhangi bir char varsa flag=1; ile belirtmesi lazim. Ilgili stackoverflow konusuna yonlendirirseniz cok sevinirim. Tabii buraya yazip aciklarsaniz cok daha guzel olur.
Öncekile char sadece 1 karakteri tutar '123' diye bir şey olamaz '1', '2', '3' şeklince bir ayrım söz konusudur.

sadece Numara/Harf ayrımı yapacaksanız hazır fonksiyonlar kullanabilirsiniz.

veya ASCII kodları üzerinden de çalışabilirsiniz.
//ASCII tablosunu görmek için basit bir kod.
C:
#include <stdio.h>

int main(void) {
    int i;
    for(i = 32;i < 256; i+=2)
    {
        printf("%3d = %c \t %3d = %c\n",i ,i ,i + 1, i + 1);
    }   
    return 0;
}
Tabloya göre:
48 (0) ile 59(9) arasında ise sayı
65(A) ile 90(Z) ve 97(a) ile 122(z) arasında ise Harftir.
eğer bu aralıklar dışında ise flag = 1; yani yabancı karakter vardır.

C:
#include <stdio.h>

int main(void)
{
    int flag = 0, i;
    int sizeOfString = 6;
    char *string = "a123+#";
    for(i = 0; i < sizeOfString; i++)
    {
        short value = string[i];
        if(value >= 48 && value <= 59)
        {
            //0-9 it's a number
            printf("%c is a Number\n",value);
        }
        else if((value >= 65 && value <= 90) || (value >= 97 && value <= 122))
        {
            //A-Z || a-z it's a letter
            printf("%c is a Letter\n",value);
        }
        else
        {
            flag = 1;   
        }
    }
    printf("flag = %d\n",flag);
    return 0;
}
 
Uyarı! Bu konu 7 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Geri
Yukarı