folder Tahribat.com Forumları
linefolder C - C++
linefolder C Dilinde Atoi Fonksiyonu



C Dilinde Atoi Fonksiyonu

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    akustikelektrik
    akustikelektrik's avatar
    Kayıt Tarihi: 09/Şubat/2013
    Erkek

    kullanıcıdan aşağıdaki şekilde bir input alıyorum,karakter dizisinde tutuyorum.

    "9-3+11/4^3"

    daha sonra bu işlemi yaptırıp sonucu döndürmek için bir while döngüsü ve içine if else yapıları falan yazdım.Planım atoi fonksiyonunu kullanarak,bu dizideki her sayıyı tek tek double,yada integer yapmaktı.Ancak atoi fonksiyonu tüm diziyi sayıya çeviriyor.

    yani;

    temp=atoi(karakter[2]);

    bu şekilde yazınca olmadı doğal olarak.

    Bana dizinin belirlediğim bir elemanını sayıya çevirecek fonksiyon lazım.Nasıl yapabilirim müridler,bir el atın şuna :)

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    OnLyGoDCaNStoPMe
    OnLyGoDCaNStoPMe's avatar
    Kayıt Tarihi: 24/Mart/2010
    Erkek

    hocam şöyle denermisin acaba

    temp = atoi(&karakter[2]);

    bende bunu ekleyince ilk karakteri sayi olarak tempe aktardı.

  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    akustikelektrik
    akustikelektrik's avatar
    Kayıt Tarihi: 09/Şubat/2013
    Erkek
    OnLyGoDCaNStoPMe bunu yazdı

    hocam şöyle denermisin acaba

    temp = atoi(&karakter[2]);

    bende bunu ekleyince ilk karakteri sayi olarak tempe aktardı.

    denedim hocam bunu yapınca ilk iki karakteri almayıp sonrasını tempe aktardı

    yani 98765 yazdığımda 765 kaydetti.Tam dediğim gibi olmadı ama bu bile çok işe yarar,eğer tam çözüm yoksa algoritma yı buna göre değiştirecez demektir :)

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    DrKill
    DrKill's avatar
    Kayıt Tarihi: 10/Mart/2004
    Erkek

    charToInt diye bir fonksiyon yaz 1 parametre alsın oda karakter char cinsinden olsun.

     

    char parametre;

    char karakterler[] = {'0','1','2','3','.....'9'};

    int sayilar[] = {0,1,2,3,4,....9};

     

    for(int i=0; i<=9; i++)

    {

           if(karakterler[i] == parametre)

                  return sayilar[i];

    }

    return -1; de

     

    ondan sonra stringleri bu fonksiyon ile -1 dönmediği sürece kullan.

     

     

    atoi çalışması lazım ama işte . Vaktim yok deneyemiyorum bu mantık çalışır ama.

    DrKill tarafından 01/Ağu/13 02:52 tarihinde düzenlenmiştir

    Bu imzayı her gördüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı sömürmektir
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    akustikelektrik
    akustikelektrik's avatar
    Kayıt Tarihi: 09/Şubat/2013
    Erkek
    DrKill bunu yazdı

    charToInt diye bir fonksiyon yaz 1 parametre alsın oda karakter char cinsinden olsun.

     

    char parametre;

    char karakterler[] = {'0','1','2','3','.....'9'};

    int sayilar[] = {0,1,2,3,4,....9};

     

    for(int i=0; i<=9; i++)

    {

           if(karakterler[i] == parametre)

                  return sayilar[i];

    }

    return -1; de

     

    ondan sonra stringleri bu fonksiyon ile -1 dönmediği sürece kullan.

     

     

    atoi çalışması lazım ama işte . Vaktim yok deneyemiyorum bu mantık çalışır ama.

    Hocam tam anlayamadım bunu,kullanıcıdan aldığım tüm inputlar char tipinde,dizide tutuluyor.Burada her karakteri nasıl ayrı ayrı int yaptın? bana gereken tam olarak bu,sayıları ayrı ayrı tutmak gerekiyor.Aradaki + * işaretlerini falan if else yazarak geçerim diyorum,onlarıda int yapmaya çalışmayacak.

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    OnLyGoDCaNStoPMe
    OnLyGoDCaNStoPMe's avatar
    Kayıt Tarihi: 24/Mart/2010
    Erkek
    akustikelektrik bunu yazdı
    OnLyGoDCaNStoPMe bunu yazdı

    hocam şöyle denermisin acaba

    temp = atoi(&karakter[2]);

    bende bunu ekleyince ilk karakteri sayi olarak tempe aktardı.

    denedim hocam bunu yapınca ilk iki karakteri almayıp sonrasını tempe aktardı

    yani 98765 yazdığımda 765 kaydetti.Tam dediğim gibi olmadı ama bu bile çok işe yarar,eğer tam çözüm yoksa algoritma yı buna göre değiştirecez demektir :)

    gece gece 565le denemiştim ilk 5 zannetmişim.şu şekilde denedim oldu hocam geçici bi chara aktararak.(yani umarım olmuştur :D )

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        char karakter[50];
        int temp;
        char tempchar[10];
        printf("Yaz!\n");
        scanf("%s",karakter);
        printf("\n");
        *tempchar = karakter[0];
        temp = atoi(&tempchar);
        printf("%d",temp);
        return 0;
    }
    
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    DrKill
    DrKill's avatar
    Kayıt Tarihi: 10/Mart/2004
    Erkek
    akustikelektrik bunu yazdı
     

    Hocam tam anlayamadım bunu,kullanıcıdan aldığım tüm inputlar char tipinde,dizide tutuluyor.Burada her karakteri nasıl ayrı ayrı int yaptın? bana gereken tam olarak bu,sayıları ayrı ayrı tutmak gerekiyor.Aradaki + * işaretlerini falan if else yazarak geçerim diyorum,onlarıda int yapmaya çalışmayacak.

    Hocam gece gece bana fonksiyon yazdırıyorsun. Visual Studio 2010 da denedim çalışıyor. Sayıların rakamlarını tek tek çekersin. Diğer işlemleri sen yap artık biraz anlamışsındır umarım. Geri kalanları if lerle elselerle while larla dolarla yap artık.

     

    #include "stdio.h"
    
    #include "conio.h"
    #include "string.h"
    
    int charToInt(char karakter)
    {
    	char karakterler[] = {'0','1','2','3','4','5','6','7','8','9'};
    	int sayilar[] = {0,1,2,3,4,5,6,7,8,9};
    
    	for(int i=0; i<=9; i++)
    	{
    		if(karakterler[i] == karakter)
    			return sayilar[i];
    	}
    	return -1;
    }
    
    int main(void)
    {
    	char kullaniciGirdisi[] = "11 + 22 /44 sonuç";
    	int kullaniciGirdisiBoyutu = (unsigned)strlen(kullaniciGirdisi);
    	int sayi = 0;
    	for(int i=0; i<kullaniciGirdisiBoyutu; i++)
    	{
    		if((sayi = charToInt(kullaniciGirdisi[i])) != -1)
    		{
    			printf("%d",sayi);
    		}
    	}
    	getch();
    	return 0;
    }
    DrKill tarafından 01/Ağu/13 03:29 tarihinde düzenlenmiştir

    Bu imzayı her gördüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı sömürmektir
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    akustikelektrik
    akustikelektrik's avatar
    Kayıt Tarihi: 09/Şubat/2013
    Erkek
    OnLyGoDCaNStoPMe bunu yazdı
    akustikelektrik bunu yazdı
    OnLyGoDCaNStoPMe bunu yazdı

    hocam şöyle denermisin acaba

    temp = atoi(&karakter[2]);

    bende bunu ekleyince ilk karakteri sayi olarak tempe aktardı.

    denedim hocam bunu yapınca ilk iki karakteri almayıp sonrasını tempe aktardı

    yani 98765 yazdığımda 765 kaydetti.Tam dediğim gibi olmadı ama bu bile çok işe yarar,eğer tam çözüm yoksa algoritma yı buna göre değiştirecez demektir :)

    gece gece 565le denemiştim ilk 5 zannetmişim.şu şekilde denedim oldu hocam geçici bi chara aktararak.(yani umarım olmuştur :D )

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        char karakter[50];
        int temp;
        char tempchar[10];
        printf("Yaz!\n");
        scanf("%s",karakter);
        printf("\n");
        *tempchar = karakter[0];
        temp = atoi(&tempchar);
        printf("%d",temp);
        return 0;
    }
    

    Benim aldığım hatanın aynısı çıktı hocam,

     cannot convert `char (*)[10]' to `const char*' for argument `1' to `int atoi(const char*)'

  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    akustikelektrik
    akustikelektrik's avatar
    Kayıt Tarihi: 09/Şubat/2013
    Erkek
    DrKill bunu yazdı
    akustikelektrik bunu yazdı
     

    Hocam tam anlayamadım bunu,kullanıcıdan aldığım tüm inputlar char tipinde,dizide tutuluyor.Burada her karakteri nasıl ayrı ayrı int yaptın? bana gereken tam olarak bu,sayıları ayrı ayrı tutmak gerekiyor.Aradaki + * işaretlerini falan if else yazarak geçerim diyorum,onlarıda int yapmaya çalışmayacak.

    Hocam gece gece bana fonksiyon yazdırıyorsun. Visual Studio 2010 da denedim çalışıyor. Sayıların rakamlarını tek tek çekersin. Diğer işlemleri sen yap artık biraz anlamışsındır umarım. Geri kalanları if lerle elselerle while larla dolarla yap artık.

     

    #include "stdio.h"
    
    #include "conio.h"
    #include "string.h"
    
    int charToInt(char karakter)
    {
    	char karakterler[] = {'0','1','2','3','4','5','6','7','8','9'};
    	int sayilar[] = {0,1,2,3,4,5,6,7,8,9};
    
    	for(int i=0; i<=9; i++)
    	{
    		if(karakterler[i] == karakter)
    			return sayilar[i];
    	}
    	return -1;
    }
    
    int main(void)
    {
    	char kullaniciGirdisi[] = "11 + 22 /44 sonuç";
    	int kullaniciGirdisiBoyutu = (unsigned)strlen(kullaniciGirdisi);
    	int sayi = 0;
    	for(int i=0; i<kullaniciGirdisiBoyutu; i++)
    	{
    		if((sayi = charToInt(kullaniciGirdisi[i])) != -1)
    		{
    			printf("%d",sayi);
    		}
    	}
    	getch();
    	return 0;
    }

    Hocam bu sefer oldu sanırım  :) çok sağol zahmet oldu akşam akşam :)

  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    OnLyGoDCaNStoPMe
    OnLyGoDCaNStoPMe's avatar
    Kayıt Tarihi: 24/Mart/2010
    Erkek
    akustikelektrik bunu yazdı

    Benim aldığım hatanın aynısı çıktı hocam,

     cannot convert `char (*)[10]' to `const char*' for argument `1' to `int atoi(const char*)'

    Hallolmuş gerçi ama Codeblocks ta normal çalışıyor bende

    temp = atoi(&tempchar[0]);

    şöyle belki senin derleyicidede çalışır :) artık hangisi kolayına gelirse.önceki yazdığım gibide bu düzeltmeylede

    Codeblocks normal bir şekilde derleyip çalıştırıyor.

    OnLyGoDCaNStoPMe tarafından 01/Ağu/13 03:43 tarihinde düzenlenmiştir
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    akustikelektrik
    akustikelektrik's avatar
    Kayıt Tarihi: 09/Şubat/2013
    Erkek
    OnLyGoDCaNStoPMe bunu yazdı
    akustikelektrik bunu yazdı

    Benim aldığım hatanın aynısı çıktı hocam,

     cannot convert `char (*)[10]' to `const char*' for argument `1' to `int atoi(const char*)'

    Hallolmuş gerçi ama Codeblocks ta normal çalışıyor bende

    temp = atoi(&tempchar[0]);

    şöyle belki senin derleyicidede çalışır :) artık hangisi kolayına gelirse.önceki yazdığım gibide bu düzeltmeylede

    Codeblocks normal bir şekilde derleyip çalıştırıyor.

    şimdi açıklığa kavuştu atoi konusu.. derleyicide sıkıntı oluyor,dev c++ kullanıyorum o yüzden böyle olmuş,şimdi düzeldi..Derleyiciden derleyiciye farklı kod ihtiyacına sinir oluyorum bu dilin :D sağolun beyler tekrardan

Toplam Hit: 4589 Toplam Mesaj: 11