/**
* Ansi C "itoa" based on Kernighan & Ritchie's "Ansi C":
*/
void strreverse(char* begin, char* end) {
char aux;
while(end>begin)
aux=*end, *end--=*begin, *begin++=aux;
}
void itoa(int value, char* str, int base) {
static char num[] = "0123456789abcdefghijklmnopqrstuvwxyz";
char* wstr=str;
int sign;
// Validate base
if (base<2 || base>35){ *wstr='\0'; return; }
// Take care of sign
if ((sign=value) < 0) value = -value;
// Conversion. Number is reversed.
do *wstr++ = num[value%base]; while(value/=base);
if(sign<0) *wstr++='-';
*wstr='\0';
// Reverse string
strreverse(str,wstr-1);
}
/**
* Ansi C "itoa" based on Kernighan & Ritchie's "Ansi C"
* with slight modification to optimize for specific architecture:
*/
void strreverse(char* begin, char* end) {
char aux;
while(end>begin)
aux=*end, *end--=*begin, *begin++=aux;
}
void itoa(int value, char* str, int base) {
static char num[] = "0123456789abcdefghijklmnopqrstuvwxyz";
char* wstr=str;
int sign;
div_t res;
// Validate base
if (base<2 || base>35){ *wstr='\0'; return; }
// Take care of sign
if ((sign=value) < 0) value = -value;
// Conversion. Number is reversed.
do {
res = div(value,base);
*wstr++ = num[res.rem];
}while(value=res.quot);
if(sign<0) *wstr++='-'; *wstr='\0';
// Reverse string
strreverse(str,wstr-1);
}
/**
* C++ version std::string style "itoa":
*/
std::string itoa(int value, int base) {
enum { kMaxDigits = 35 };
std::string buf;
buf.reserve( kMaxDigits ); // Pre-allocate enough space.
// check that the base if valid
if (base < 2 || base > 16) return buf;
int quotient = value;
// Translating number to string with base:
do {
buf += "0123456789abcdef"[ std::abs( quotient % base ) ];
quotient /= base;
} while ( quotient );
// Append the negative sign for base 10
if ( value < 0 && base == 10) buf += '-';
std::reverse( buf.begin(), buf.end() );
return buf;
}
/**
* C++ version char* style "itoa":
*/
char* itoa( int value, char* result, int base ) {
// check that the base if valid
if (base < 2 || base > 16) {
*result = 0; return result;
}
char* out = result;
int quotient = value;
do {
*out = "0123456789abcdef"[ std::abs( quotient % base ) ];
++out;
quotient /= base;
} while ( quotient );
// Only apply negative sign for base 10
if ( value < 0 && base == 10) *out++ = '-';
std::reverse( result, out );
*out = 0;
return result;
}
[DB/MySQL] sql문 정리 (0) | 2016.11.24 |
---|---|
[프로그래밍] itoa - 정수형 데이터를 문자열로 변환하기 (0) | 2016.11.22 |
[프로그래밍] 문자열 배열 정렬(소트;Sort)역순 소팅, qsort 함수 사용법 (0) | 2016.11.20 |
[프로그래밍] 전처리문에 대한 설명 (0) | 2016.11.20 |
[프로그래밍/알고리즘] Quick Sort (0) | 2016.11.20 |