본문 바로가기 메뉴 바로가기

친절한 매뉴얼

프로필사진
  • 글쓰기
  • 관리
  • 태그
  • 방명록
  • RSS

친절한 매뉴얼

검색하기 폼
  • 분류 전체보기 (94)
    • C | C++ (86)
    • HTML | CSS (4)
    • 파이썬 (1)
    • 자바스크립트 (0)
    • PHP (1)
    • KOTLIN (1)
  • 방명록

C | C++ (86)
C/C++ 스트링 대소문자 바꾸기, std::transform, toupper, tolower 사용

C/C++에서 가끔씩 사용하지만 다른 언어에서 지원하는 것으로 착각하고 혼란스러워하는 것이 단순한 대소문자 바꾸기이다. int rlupper(char *str) { if(str == NULL) return -1; while(*str != '\0') { *str = toupper(*str); str++; } return 0; } int rllower(char *str) { if(str == NULL) return -1; while(*str != '\0') { *str = tolower(*str); str++; } return 0; } 전형적인 사용법은 위의 예제 코드처럼 toupper(), tolower() 함수를 사용해서 대문자나 소문자 변환을 하는 방법이다. 문제는 이들 함수는 문자 하나씩을 받아 변환..

C | C++ 2024. 2. 2. 09:00
서로 다른 값 두 개를 리턴하기(std::pair)

C언어와 같은 전통적인 프로그래밍 언어에서는 함수에서 값을 리턴한다고 생각하면 정수나 구조체의 포인터와 같은 단일값을 생각하지만 파이썬이나 자바스크립트와 같은 요즘 많이 쓰는 언어에서는 서로 다른 타입의 값 두 개 뿐만 아니라 리스트를 넘길 수도 있다. C++에서는 리스트나 사전 타입이 아니라 단순히 두 개의 요소로 이루어진 객체를 위해서 std::pair라는 템플릿을 제공한다. std::pair parse_row(xml::parser *parser, xlnt::detail::number_serialiser &converter, std::vector &parsed_cells) { std::pair props; for (auto &attr : parser->attribute_map()) { if (stri..

C | C++ 2024. 1. 25. 09:27
스트링 클래스(string, std::basic_string) 정리

스트링 클래스는 C++ 프로그램을 작성하면서 가장 빈번하게 사용하는 클래스 중의 하나이다. 기존의 char, char *, char []를 사용하는 문자열 표현도 사용할 수 있지만 string 클래스를 활용하면 좀 더 편리하고 안전한 작업을 할 수 있다. std::string 타입은 char을, 각 원소로 std::wstring 타입은 wchar_t 타입을 원소로 한다. 다른 형태의 스트링 타입도 있는 데 사용하려면 기준 C++ 컴파일러 버전을 확인해야 한다. string strParse( const string &path, int level, const string &sep, int *off) { int an_dir = off ? *off : 0; int t_lev = 0; size_t t_dir; i..

C | C++ 2024. 1. 24. 21:08
사전 클래스(std::map) 정리

파이썬, PHP, 자바스크립트, 심지어 C#까지 개발자들이 즐겨 사용하는 프로그래밍 언어에서는 대부분 사전 타입을 지원한다. 그만큼 아주 편리하게 프로그램을 작성할 수 있기 때문이다. std::map 또한 C++에서 간편하게 사전 타입을 활용할 수 있도록 지원하는 컨테이너 클래스이다. "키-값" 쌍으로 관리하는 정렬된 리스트로 키는 리스트 내에서 유일한 값이어야 한다. "[키]"형식으로 키에 해당하는 값에 접근할 수 있다. 값에 단일 값이 아닌 여러 요소를 가지게 하고 싶다면 값에 또 다른 map이나 벡터, 클래스, 배열 등을 갖도록 하면 된다. map은 반드시 "키-값" 쌍으로 관리하는 원칙을 지켜야 한다. 정렬되지 않은 리스트로 관리하려면 unordered_map을 사용한다. map itsMap; i..

C | C++ 2024. 1. 22. 15:29
벡터 클래스(std::vector) 정리

벡터 클래스는 모든 원소들이 동일한 타입을 갖는 배열과 유사하지만 그 크기를 동적으로 관리할 수 있다는 점에서 차이가 있다. 배열처럼 인덱스를 통해 각 원소에 접근할 수 있다. 배열보다 공간을 더 차지하고 추가적인 처리 비용이 더 필요하다는 특성이 있다. 향후 확장을 위해서 미리 여분의 공간을 확보하고, 확보한 공간을 넘어서서 확장하는 경우 공간 재할당을 수행하기 때문이다. std::vector split_path(const std::string &path, char delim) { std::vector split; std::string::size_type previous_index = 0; auto separator_index = path.find(delim); while (separator_index..

C | C++ 2024. 1. 22. 13:29
프로세스 생성과 관리

☞ fork, getpid, getppid, waitpid, wait, setsid, getsid, getpgrp, getpgid, setpgid, setpgrp pid_t fork(void); pid_t getpid(void); pid_t getppid(void); pid_t waitpid(pid_t pid, int *status, int options); pid_t wait(int *status); pid_t setsid(void); pid_t getsid(pid_t pid); pid_t getpgrp(void); int getpgid(pid_t pid); int setpgid(pid_t pid, pid_t pgid); 각 프로세스는 pid_t 타입의 고유한 프로세스 아이디(PID)를 갖습니다. ge..

C | C++ 2018. 8. 4. 14:56
프로그램 실행

☞ system, execv, execl, execve, execle, execvp, execlp int system(const char *command); int execv(const char *filename, char *const argv[]); int execl(const char *filename, const char *arg0, ...); int execve(const char *filename, char *const argv[], char *const env[]); int execle(const char *filename, const char *arg0, ..., char *const env[]); int execvp(const char *filename, char *const argv[])..

C | C++ 2018. 8. 4. 14:54
프로그램 종료

☞ exit, atexit, abort void exit(int status); int atexit(void(*function_name)(void)); void abort(void); C 프로그램에서 프로그램을 종료하는 가장 일반적인 방법은 main() 함수를 빠져 나오는 것입니다. 많은 경우 별 신경을 쓰지 않지만 main() 함수의 리턴 타입은 정수형(int)으로 값을 리턴하면 프로그램을 실행시킨 쉘이나 부 프로세스에서 그 값을 확인할 수 있습니다. ☞ 예제1 void boot_server_status(BOOT_SERVER_STATUS status) { static const char * status_str[] = { "UNKNOWN", "UP", "DOWN", "MAINTENANCE" }; if (..

C | C++ 2018. 8. 4. 14:52
이전 1 2 3 4 5 6 7 ··· 11 다음
이전 다음

Blog is powered by Tistory / Designed by Tistory

티스토리툴바