2008/05/22
sprintf 문자열 포맷에 Asterisk(*) 사용하기
C++ 함수 중에 sprintf 라는 함수가 있는데 이는 숫자나 문자를 일정 포맷에 맞게 만들어 주는 기능을 한다.
형식은 다음과 같다.
int sprintf(char *s, const char *format, ...);
여기에 사용되는 format중 데이터 타입을 설정하는 예약어는 다음과 같다.
%d, %i: 정수
%o, %x: 정수 8진수, 16진수
%c: 문자
%s: 문자열
%f: 부동 소수점(단일 정밀도) 숫자
%e: 배정밀도(double precision) 숫자
%g: 배정밀도 숫자
일반적으로 데이터 타입을 나타내는 문자 앞에 숫자를 입력하여 정밀도를 지정하는데 숫자 대신에 Asterisk(*)를 입력하게 되면 출력되는 데이터의 자리수를 지정할 수 있다.
%3d, %10s
%*d, %*s
글로만 설명하는 것 보다 소스를 보는게 이해가 빠를 것이다.
Original Post : http://neodreamer-dev.tistory.com/101
형식은 다음과 같다.
int sprintf(char *s, const char *format, ...);
여기에 사용되는 format중 데이터 타입을 설정하는 예약어는 다음과 같다.
%d, %i: 정수
%o, %x: 정수 8진수, 16진수
%c: 문자
%s: 문자열
%f: 부동 소수점(단일 정밀도) 숫자
%e: 배정밀도(double precision) 숫자
%g: 배정밀도 숫자
일반적으로 데이터 타입을 나타내는 문자 앞에 숫자를 입력하여 정밀도를 지정하는데 숫자 대신에 Asterisk(*)를 입력하게 되면 출력되는 데이터의 자리수를 지정할 수 있다.
%3d, %10s
%*d, %*s
글로만 설명하는 것 보다 소스를 보는게 이해가 빠를 것이다.
예제 소스 보기
#include <iostream>
using namespace std;
int main()
{
char szBuf[1024];
cout << "1. %*d with integer" << endl;
int i = 100;
memset(szBuf, '\0', 1024);
sprintf(szBuf, "%*d", 0, i); cout << szBuf << endl;
sprintf(szBuf, "%*d", 4, i); cout << szBuf << endl;
sprintf(szBuf, "%*d", 7, i); cout << szBuf << endl;
sprintf(szBuf, "%*d", 10, i); cout << szBuf << endl;
cout << endl;
cout << "2. %*f with float" << endl;
float f = 123.00f;
memset(szBuf, '\0', 1024);
sprintf(szBuf, "%*f", 0, f); cout << szBuf << endl;
sprintf(szBuf, "%*f", 5, f); cout << szBuf << endl;
sprintf(szBuf, "%*f", 15, f); cout << szBuf << endl;
sprintf(szBuf, "%*f", 20, f); cout << szBuf << endl;
cout << endl;
f = 123.123f;
memset(szBuf, '\0', 1024);
sprintf(szBuf, "%*f", 0, f); cout << szBuf << endl;
sprintf(szBuf, "%*f", 5, f); cout << szBuf << endl;
sprintf(szBuf, "%*f", 15, f); cout << szBuf << endl;
sprintf(szBuf, "%*f", 20, f); cout << szBuf << endl;
cout << endl;
cout << "3. %*f with double" << endl;
double d = 123.10;
memset(szBuf, '\0', 1024);
sprintf(szBuf, "%*f", 0, d); cout << szBuf << endl;
sprintf(szBuf, "%*f", 5, d); cout << szBuf << endl;
sprintf(szBuf, "%*f", 15, d); cout << szBuf << endl;
sprintf(szBuf, "%*f", 20, d); cout << szBuf << endl;
cout << endl;
d = 123.123;
memset(szBuf, '\0', 1024);
sprintf(szBuf, "%*f", 0, d); cout << szBuf << endl;
sprintf(szBuf, "%*f", 5, d); cout << szBuf << endl;
sprintf(szBuf, "%*f", 15, d); cout << szBuf << endl;
sprintf(szBuf, "%*f", 20, d); cout << szBuf << endl;
cout << endl;
cout << "4. %*g with double" << endl;
d = 123.10;
memset(szBuf, '\0', 1024);
sprintf(szBuf, "%*g", 0, d); cout << szBuf << endl;
sprintf(szBuf, "%*g", 5, d); cout << szBuf << endl;
sprintf(szBuf, "%*g", 15, d); cout << szBuf << endl;
sprintf(szBuf, "%*g", 20, d); cout << szBuf << endl;
cout << endl;
d = 123.123;
memset(szBuf, '\0', 1024);
sprintf(szBuf, "%*g", 0, d); cout << szBuf << endl;
sprintf(szBuf, "%*g", 5, d); cout << szBuf << endl;
sprintf(szBuf, "%*g", 15, d); cout << szBuf << endl;
sprintf(szBuf, "%*g", 20, d); cout << szBuf << endl;
cout << endl;
cout << "5. %*e with double" << endl;
d = 123.10;
memset(szBuf, '\0', 1024);
sprintf(szBuf, "%*e", 0, d); cout << szBuf << endl;
sprintf(szBuf, "%*e", 5, d); cout << szBuf << endl;
sprintf(szBuf, "%*e", 15, d); cout << szBuf << endl;
sprintf(szBuf, "%*e", 20, d); cout << szBuf << endl;
cout << endl;
d = 123.123;
memset(szBuf, '\0', 1024);
sprintf(szBuf, "%*e", 0, d); cout << szBuf << endl;
sprintf(szBuf, "%*e", 5, d); cout << szBuf << endl;
sprintf(szBuf, "%*e", 15, d); cout << szBuf << endl;
sprintf(szBuf, "%*e", 20, d); cout << szBuf << endl;
cout << endl;
cout << "6. %*s with chars" << endl;
char sz[6] = "hello";
sprintf(szBuf, "%*s", 0, sz); cout << szBuf << endl;
sprintf(szBuf, "%*s", 4, sz); cout << szBuf << endl;
sprintf(szBuf, "%*s", 7, sz); cout << szBuf << endl;
sprintf(szBuf, "%*s", 10, sz); cout << szBuf << endl;
cout << endl;
return 0;
}
예제 결과 보기
1. %*d with integer
100
100
100
100
2. %*f with float
123.000000
123.000000
123.000000
123.000000
123.123001
123.123001
123.123001
123.123001
3. %*f with double
123.100000
123.100000
123.100000
123.100000
123.123000
123.123000
123.123000
123.123000
4. %*g with double
123.1
123.1
123.1
123.1
123.123
123.123
123.123
123.123
5. %*e with double
1.231000e+02
1.231000e+02
1.231000e+02
1.231000e+02
1.231230e+02
1.231230e+02
1.231230e+02
1.231230e+02
6. %*s with chars
hello
hello
hello
hello
Original Post : http://neodreamer-dev.tistory.com/101
Labels:
asterisk
,
C++
,
format string
,
sprintf
,
TistoryOldPost
Subscribe to:
Post Comments
(
Atom
)
No comments :
Post a Comment