#include <iostream> #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include <cmath> using namespace std; void print(const char* first,...) { va_list l; va_start(l, first); for(int i = 0; i<strlen(first); i++) { if(first[i] != '%' && first[i] != '@') putchar(first[i]); else if(first[i] == '%') { i++; if(first[i] == 'd') { int d = va_arg(l, int); char str[100]; itoa(d, str, 10); fputs(str, stdout); } else if (first[i] == 's') { fputs(va_arg(l, char*), stdout); } else if(first[i] == 'f') { double f = va_arg(l, double); char* strf; int decimal, sign; strf = _fcvt(f, 5, &decimal, &sign); if(sign == 1) putchar('-'); for(int j = 0; j<decimal; j++) putchar(*(strf+j)); if(decimal == 0) putchar('0'); putchar('.'); for(int k = j; k<5; k++) putchar(*(strf+k)); } else { char temp[100]; int itemp = va_arg(l, int); itoa(itemp, temp, 10); int len = strlen(temp); int num_underBar = atoi(&first[i]); for(int m = 0; m<num_underBar; m++) { if(len < num_underBar) { putchar(' '); num_underBar--; continue; } else if(len >= num_underBar) { fputs(temp, stdout); break; } } i++; } } else if(first[i] == '@') { i++; if(first[i] == 'd') { int *i_array = va_arg(l, int*); int index = va_arg(l, int); char str[100]; putchar('{'); for(int x = 0; x<index; x++) { itoa(*(i_array + x), str, 10); fputs(str, stdout); if(x != index -1) putchar(','); } putchar('}'); } else if(first[i] == 's') { char** s_array = va_arg(l, char**); int index = va_arg(l, int); putchar('{'); for(int y = 0; y<index; y++){ fputs(*(s_array + y), stdout); if(y != index -1) putchar(','); } putchar('}'); } else if(first[i] == 'f') { double* d_array = va_arg(l, double*); int index = va_arg(l, int); int decimal, sign; char* strf; putchar('{'); for(int z=0; z< index; z++) { strf = _fcvt(*(d_array + z), 5, &decimal, &sign); if(sign == 1) putchar('-'); if(decimal == 0) putchar('0'); for(int j = 0; j<decimal; j++) putchar(*(strf+j)); putchar('.'); for(int k = j; k<5; k++) putchar(*(strf+k)); if(z != index -1) putchar(','); } putchar('}'); } } } putchar('\n'); va_end(l); } int main() { { int a = 10; char *b = "example"; double c = 10.5; print("number: %d, string: %s, real number: %f\n", a, b, c); } { int a[3] = { 1, 2, 3 }; char *b[2] = { "abc", "def" }; print("array: @d\n", a, 3); print("array: @s\n", b, 2); } { int a = 123; int b = 12345; int c = 12345678; print("number: %5d\n", a); print("number: %5d\n", b); print("number: %5d\n", c); } return 0; }