Warning: Undefined array key "HTTP_ACCEPT_LANGUAGE" in /var/www/vhosts/bilgigunlugum.net/httpdocs/index.php on line 43
C Programlama

BG MVC Model View Controller eğitim serisi yayında...

Ana sayfa > Programlama > C Programlama > C örnek kodlar > c_ornek00032

C örnek kodlar

Integer ve float değerlere binler basamağı ayırıcı karakter ekleme

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