C Dilinde Atoi Fonksiyonu
-
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 :)
-
hocam şöyle denermisin acaba
temp = atoi(&karakter[2]);
bende bunu ekleyince ilk karakteri sayi olarak tempe aktardı.
-
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 :)
-
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 -
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.
-
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; } -
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 -
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*)'
-
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 :)
-
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 -
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
