Aşağıdaki program, bg_int_sep() fonksiyonu ile karakter dizisi olarak verilen pozitif ve negatif değere sahip integer ve float sayıları, binler basamağı ayırıcısı olarak nokta karakteri kullanarak, ekrana yazar. Burada, nokta karakteri binler basamağı ayırıcısı olarak, virgül karakteri ise ondalık basamak ayırıcısı olarak kullanılmaktadır.
#include <stdio.h>
#include <string.h>
char *bg_number_sep(const char* instr, char *outstr, char sep);
int main(void)
{
char cdizi[30];
// Integer bir sayıya binler basamağı ayırıcısı ekleme
printf("%s\n", bg_number_sep("6519397702", cdizi, '.'));
// Negatif Integer bir sayıya binler basamağı ayırıcısı ekleme
printf("%s\n", bg_number_sep("-746465312879", cdizi, '.'));
// Float bir sayıya binler basamağı ayırıcısı ekleme
printf("%s\n", bg_number_sep("9513247834,675", cdizi, '.'));
// Negatif Float bir sayıya binler basamağı ayırıcısı ekleme
printf("%s", bg_number_sep("-625264587,3541", cdizi, '.'));
return 0;
}
char *bg_number_sep(const char* instr, char *outstr, char sep)
{
int ilen; // İşlem görecek karakter dizisi uzunluğu
char *ipos = instr; // Giriş karakter dizisi başlangıç adresi
char *opos = outstr; // Çıkış karakter dizisi başlangıç adresi
char *p;
p = strchr(instr, ','); // Giriş karakter dizisi içindeki ondalık ayırıcı karakterin adresini alma
if (p) ilen = p-instr; // Float değer için işlem görecek karakter dizisi uzunluğu
else ilen = strlen(instr); // Integer değer için işlem görecek karakter dizisi uzunluğu
while (*ipos) { // İşlem yapılan karakter dizisi sonuna kadar işlem
if(((instr!=ipos) && (*(ipos-1)!='-')) && (((instr+ilen)-ipos)%3==0) && ((p&&(ipos<p)) || !p)) {
*opos++ = sep;
}
*opos++ = *ipos++; // Giriş karakter dizisi karakterini çıkış karakter dizisine aktarma ve işaretçi değerlerini artırma
}
*opos = '\0';
return outstr;
}
Yukarıdaki örnekte, program aşağıdaki satırları ekrana yazar:
6.519.397.702 -746.465.312.879 9.513.247.834,675 -625.264.587,3541