목록C C++ (15)
닌자고양이
%[character-set] // 허용 문자세트 지정. 허용 문자 이외의 문자가 입력되면 그 이전까지 문자열만 추출 %[^character-set] // 비허용 문자세트 지정. 비허용 문자가 입력되면 그 이전까지 문자열만 추출 포맷 예 %[ab ] // 문자 리스트 (a,b,공백 에 매칭) %[a-c] // 문자 범위 (a,b,c 에 매칭) %[a-cd1-3] // 리스트와 범위 조합 (a,b,c, d, 1,2,3 에 매칭) %[^\r\n] // 제외식 (개행, 리턴 문자 이전까지 매칭) ] - ^ 를 문자세트에 지정하려면 ] 를 매칭 문자로 지정하려면 ]문자를 두번 써준다. %[abc]]] - 를 매칭 문자로 지정하려면 맨 마지막에 써준다. %[abc-] ^ 를 비허용 문자로 지정할 때에는 그대로 쓰..
\a 경고음 \b 백스페이스 \f 페이지 전환 \n 개행 \r 리턴 \t 수평 탭 \v 수직 탭 \\ 역슬래시 \' 작은 따옴표 \" 큰 따옴표 \# ~ \### 8진수로 1바이트 문자 표현 (ANSI) \x# ~ \x## 16진수로 1바이트 문자 표현 (ANSI) \u# ~ \u#### 16진수로 2바이트 문자 표현 (UTF-16) \U# ~ \U######## 16진수로 4바이트 문자 표현 (UTF-32)
반복문을 사용하면 이렇게 간단하게 작성할 수 있지만 int n; int a = 1234567890; for (n = 1; a > 9; n++) a /= 10; printf("%d", n); 반복문이 없다면 if 문을 여러번 사용해야 한다. int 형의 최대 값이 10자리 (2147483648) 이므로 9번 사용하면 되겠다. int n = 1; int a = 1234567890; if (a > 9) a /= 10, n++; if (a > 9) a /= 10, n++; if (a > 9) a /= 10, n++; if (a > 9) a /= 10, n++; if (a > 9) a /= 10, n++; if (a > 9) a /= 10, n++; if (a > 9) a /= 10, n++; if (a > 9)..
1. C 의 strpbrk 함수를 사용한 delimiter 문자 검색 (가장 빠름) #include #include int main(void) { char str[] = "This_is,the,,C/C++ world"; char del[] = "/, _"; char *start = str, *stop = start; for (; stop != NULL; start = stop + 1) { if (stop = strpbrk(start, del)) *stop = NULL; printf("%s\n", start); } } 출력: This is the C C++ world 2. C 의 strtok 함수를 사용한 delimiter 문자 검색 strtok 함수는 strpbrk 와 비슷한데, 발견된 구분자 위치에 자..
ifstream, ofstream 은 생성자에 ios::binary 옵션을 주지 않으면 기본적으로 텍스트 모드로써, 개행 문자(윈도우 CR+LF, 유닉스 LF, 맥 CR)를 읽을 때는 LF 로 치환해 읽어오고, 쓸때는 LF 를 해당 OS별 개행 문자로 치환해 저장한다. 스트림 종료 문자(윈도우 CTRL+Z(0x1A), 맥/유닉스 CTRL+D(0x04))가 발견시 스트림 또는 파일의 끝으로 간주해 더 이상 읽기는 실패하며 eof() 는 true 가 된다. 1.한 문자씩 읽기 #include #include using namespace std; int main() { ifstream file("file.txt"); while (!file.eof()) cout
C++ 로케일 설정 후 wifstream 으로 읽기 #include #include using namespace std; int main() { locale::global(locale(".UTF-8")); wifstream f(L"text.txt"); wstring wstr; f >> wstr; } fopen 의 파일 모드 옵션에 인코딩 타입 지정해 읽기 (ccs=UNICODE 또는 UTF-8 또는 UTF-16LE) #include int main(void) { wchar_t buf[10000]; FILE* f = fopen("text.txt", "rt+,ccs=UTF-8"); fwscanf(f, L"%ls", buf); // scanf 포맷으로 읽기 fgetws(buf, 1000, f); // 한 줄 ..
// 최소 비교로 중간값 구하기 int mid(int a, int b, int c) { if (a < b) return b < c ? b : (c < a ? a : c); else return a < c ? a : (c < b ? b : c); } /* 몹쓸(?) 방법들 난독성 define #define mid(a,b,c)(a , c); // max return a + b + c - n - m; } */
개행 문자가 입력되거나 입력이 종료될 때까지 문자열을 입력 받아 공백으로 구분된 숫자들을 추출하는 예제 1. string.h 의 gets_s, strtok 사용 #define _CRT_SECURE_NO_WARNINGS #include #include int main() { char str[100], *s; int num[100], i, cnt = 0; gets_s(str); for (s = strtok(str, " "); s; s = strtok(NULL, " "), cnt++) // strtok 에 구분자 지정 if (sscanf(s, "%d", &num[cnt]) < 1) break; for (i = 0; i < cnt; i++) printf("%d\n", num[i]); } 입력: 1 2 34 56..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cgiESC/btqAbnga9zN/EHJkjBvbOrPvsH82i9nFZ0/img.png)
1. 한글 윈도우(CP949)인 경우 코드 페이지를 CP1252로 변경해 윈도우 확장 아스키 문자 출력 윈도우 표준 8비트 코드 페이지 CP1252(Windows-1252, ISO-8859-1, 라틴 알파벳 문자 집합) 사용 #include #include int main() { SetConsoleOutputCP(1252); // 코드 페이지 CP1252 로 변경 printf("%c", 216); // 윈도우 확장 아스키 문자 Ø 출력 } * 코드 페이지를 1252 대신 437 을 사용하면 도스 확장 아스키 문자 ╪ 를 출력한다. 2. 콘솔 출력 스트림을 유니코드 모드로 변경한 뒤 유니코드 문자 함수를 사용 유니코드는 16비트 코드 페이지로 8비트 코드 페이지 1252를 하위 호환함 #include #i..
windows #include #include int main(void) { int c = 0; while (c != 3) { c = _getch(); // ctrl+c 입력시 ascii code 3 (End Of Text) 반환 printf("getch %d\n", c); } printf("break\n"); } linux #include #include bool m_break = false; void OnSignal(int sig) // 콘솔 ctrl+c 입력시 인터럽트 발생 { signal(sig, SIG_IGN); printf("break\n"); m_break = true; } int main(void) { signal(SIGINT, OnSignal); // 인터럽트 시그널 콜백 설정 while..
#include int main(void) { for (int i = 1, j = 1; i 0 && j % 10 && j % 10 % 3; j /= 10); }
#include #include void eratos_sieve(int n, char* primes) // primes size = n + 1 { int i, j; for (i = 2; i
char* NumToString(int num, int radix, char* outbuf) { char* p = outbuf, charset[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; for (int n = num; n > 0; n /= radix) p++; for (*p-- = 0; num > 0; num /= radix) *p-- = charset[num % radix]; return outbuf; } char s[100]; printf("%s", NumToString(1234, 16, s)); // 1234를 16진수 문자열로 출력 ==> 4D2 printf("%s", NumToString(1234, 2, s)); // 1234를 2진수 문자열로 출력 ==> 1..
scanf() 사용시 엔터까지 입력을 한 경우 입력 버퍼에서 마지막 개행문자 '\n' 는 비우지 않는다. 그래서 이후에 문자나, 문자열을 읽으려 할때 개행문자 또는 빈문자열만 들어오는 일을 겪는다. 이 문제를 해결하려면 입력 버퍼에서 개행 문자 '\n' 를 비워주어야 한다. // 후속 scanf 에서 이전 개행 문자를 제거하면서 입력 받기 scanf("%d", &d); scanf("\n%c", &c); // \n, \t, 공백 등 사용 가능 // 개행 문자까지 한번 비우기 (getchar 사용) while(getchar() != '\n'); // 개행 문자까지 한번 비우기 (scanf 사용) scanf("%*[^\n]"); scanf("%*c"); // 연속된 모든 개행 문자 비우기 (C++) cin.i..
n번째 피보나치 수를 구하는 재귀 함수. 직관적이나 실행시간 O(n^2) int fib(int n) { if (n