kcetinkaya
28/01/2008, 22:19
void *turkce_karakter_donustur(char *ptr)
{
char karakterler[]={'ç','ğ','ı','ö','ş','ü','Ç','Ğ','İ','Ö','Ş','Ü'} ;
int a,b;
for (a=0;ptr[a]!='\0';a++)
for (b=0;b<12;b++)
if (ptr[a]==karakterler[b])
switch (ptr[a]) {
case 'ç': ptr[a]='c'; break;
case 'ğ': ptr[a]='g'; break;
case 'ı': ptr[a]='i'; break;
case 'ö': ptr[a]='o'; break;
case 'ş': ptr[a]='s'; break;
case 'ü': ptr[a]='u'; break;
case 'Ç': ptr[a]='C'; break;
case 'Ğ': ptr[a]='G'; break;
case 'İ': ptr[a]='I'; break;
case 'Ö': ptr[a]='O'; break;
case 'Ş': ptr[a]='S'; break;
case 'Ü': ptr[a]='U'; break;
}
}
C için böyle bir fonksiyon yazdım. Klavyeden alacağımız string ifade içerisindeki Türkçe karakterleri çevirecek bir fonksiyon. main içerisinde gets() fonku ile string ifadeyi alıyorum fonksiyona da gönderiyorum ifademi ancak ne yaptımsa doğru çalıştıramadım.
if (ptr[a]==karakterler[b]) burdaki if içerisine hiç bir zaman girmiyor doğal olarak da değiştirme işlemini yapmıyor.
Sorun Türkçe karakterlerin karşılaştırılmasında. Fonksiyonun yazımında bir sorun yok. Aynı kalıbı kullanarak istediğim normal bir karakteri değiştirebiliyorum, dizi üzerinde değişiklik yapabiliyorum.
C çalıştığım Kaan Aslan ın kitabında türkçe karakter sayısını veren benzer bir örnek :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 100
int gettrknum(const char *str);
int main()
{
char s[SIZE];
printf("Yaziyi giriniz : ");
gets(s);
printf("Turkce karakter sayisi : %d",gettrknum(s));
return 0;
}
int gettrknum(const char *str)
{
int counter=0;
int i;
char trk[]="çğıöşüÇĞİÖŞÜ";
for (i=0;str[i]!='\0';i++)
if (strchr(trk,str[i])) counter++;
return counter;
}
şeklinde yazılmış. Kitaptan aynen alıntı yaptım. Ancak bu programı çalıştırmayı denediğimde de ekrana her zaman 0 değerini basıyor. Yani burdada aynı sorun strchr() fonksiyonu ile türkçe karakter araması yaptığımda sorun ortaya çıkıyor. Normal bir karakter denedğim de çok güzel çalışıyor.
IDE olarak CodeBlocks ve Turbo C de denedim sonuç aynı.
Sorunun çözümüne yardımcı olursanız sevinirim...
{
char karakterler[]={'ç','ğ','ı','ö','ş','ü','Ç','Ğ','İ','Ö','Ş','Ü'} ;
int a,b;
for (a=0;ptr[a]!='\0';a++)
for (b=0;b<12;b++)
if (ptr[a]==karakterler[b])
switch (ptr[a]) {
case 'ç': ptr[a]='c'; break;
case 'ğ': ptr[a]='g'; break;
case 'ı': ptr[a]='i'; break;
case 'ö': ptr[a]='o'; break;
case 'ş': ptr[a]='s'; break;
case 'ü': ptr[a]='u'; break;
case 'Ç': ptr[a]='C'; break;
case 'Ğ': ptr[a]='G'; break;
case 'İ': ptr[a]='I'; break;
case 'Ö': ptr[a]='O'; break;
case 'Ş': ptr[a]='S'; break;
case 'Ü': ptr[a]='U'; break;
}
}
C için böyle bir fonksiyon yazdım. Klavyeden alacağımız string ifade içerisindeki Türkçe karakterleri çevirecek bir fonksiyon. main içerisinde gets() fonku ile string ifadeyi alıyorum fonksiyona da gönderiyorum ifademi ancak ne yaptımsa doğru çalıştıramadım.
if (ptr[a]==karakterler[b]) burdaki if içerisine hiç bir zaman girmiyor doğal olarak da değiştirme işlemini yapmıyor.
Sorun Türkçe karakterlerin karşılaştırılmasında. Fonksiyonun yazımında bir sorun yok. Aynı kalıbı kullanarak istediğim normal bir karakteri değiştirebiliyorum, dizi üzerinde değişiklik yapabiliyorum.
C çalıştığım Kaan Aslan ın kitabında türkçe karakter sayısını veren benzer bir örnek :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 100
int gettrknum(const char *str);
int main()
{
char s[SIZE];
printf("Yaziyi giriniz : ");
gets(s);
printf("Turkce karakter sayisi : %d",gettrknum(s));
return 0;
}
int gettrknum(const char *str)
{
int counter=0;
int i;
char trk[]="çğıöşüÇĞİÖŞÜ";
for (i=0;str[i]!='\0';i++)
if (strchr(trk,str[i])) counter++;
return counter;
}
şeklinde yazılmış. Kitaptan aynen alıntı yaptım. Ancak bu programı çalıştırmayı denediğimde de ekrana her zaman 0 değerini basıyor. Yani burdada aynı sorun strchr() fonksiyonu ile türkçe karakter araması yaptığımda sorun ortaya çıkıyor. Normal bir karakter denedğim de çok güzel çalışıyor.
IDE olarak CodeBlocks ve Turbo C de denedim sonuç aynı.
Sorunun çözümüne yardımcı olursanız sevinirim...