본문 바로가기

IT/programming42

[C/C++] GCC C언어 constructor/destructor, 생성자/소멸자 GCC C언어 constructor/destructor, 생성자/소멸자 GCC 계열의 C 컴파일러도 C++의 constructor/destructor와 유사한 동작을 수행할 수 있다. entry는 당연히 main() 부터 이지만 __attribute__ 의 constructor/destructor 키워드를 사용하면 main() 실행 전과 후 함수가 호출되는 것을 확인할 수 있고, priority를 지정하여 여러개의 함수를 우선순위에 맞춰 실행할 수도 있다. priority는 0~100까지 reserved되어있으니 그 외의 숫자를 사용하면 되고 priority 사용은 필수가 아니다. 소스코드 #include #include #include volatile sig_atomic_t is_exit_loop = .. 2022. 9. 7.
[C/C++] C++ sqlite3 wrapper class sqlite3을 활용하는 C++ wrapper class를 남긴다. 매번 sqlite 함수를 사용하여 코드를 짜는건 너무 귀찮기 때문.. 소스코드: class_database.cpp #include "class_database.h" // Class: SQLHandler, 데이터베이스 관리 SQLHandler::SQLHandler(string _filename) { this->sql_handle = NULL; this->open(_filename); return ; } SQLHandler::~SQLHandler(void) { return ; } bool SQLHandler::open(string _filename) { if( sqlite3_open(_filename.c_str(), &this->sql_ha.. 2022. 3. 23.
[C/C++] C++ string replace_all replace_all string find와 replace를 조합하여 replace_all 기능을 구현한다. 역시 기록용으로 정리한다. 소스코드 #include string replace_all(string &_str, const string& _from, const string& _to) { size_t start_pos = 0; while( (start_pos = _str.find(_from, start_pos)) != std::string::npos ) { _str.replace(start_pos, _from.length(), _to); start_pos += _to.length(); } return _str; } 출처: https://hashcode.co.kr/questions/239/%EC%8A.. 2022. 3. 23.
[C/C++] C++ string ltrim, rtrim, trim ltrim, rtrim, trim C++11 환경에서 작업을 하는데 trim 기능이 없어서.. :( 직접 만들기는 귀찮고 찾다보니 스택오버플로우 댓글 중에 깔끔하게 구현한 코드가 있어서 기록용으로 정리해본다. 소스코드 #include #include #include string ltrim(string _s) { _s.erase(_s.begin(), find_if(_s.begin(), _s.end(), not1(ptr_fun(isspace)))); return _s; } string rtrim(string _s) { _s.erase(find_if(_s.rbegin(), _s.rend(), not1(ptr_fun(isspace))).base(), _s.end()); return _s; } string tri.. 2022. 3. 23.
[PHP] 변수명으로 함수 호출 / function_exists() 변수명으로 함수 호출 PHP 개발을 하다보면 함수명을 동적으로 호출해야할 때가 있는다. 생각보다 간단하므로 아래 소스코드를 참고 하면된다. 소스코드 - test(), test2() 두개의 함수를 생성하고 변수에 함수명을 입력한다. 1. function_exists() 를 이용하여 해당 문자열과 동일한 함수가 있는지 확인한다. 2. 해당 문자열과 동일한 함수가 존재한다면 변수에 () 기호를 붙여 함수를 호출하여 동작하는지 확인한다. 3. 해당 문자열과 동일한 함수가 없다면 예외 처리를 한다. 결과 test test2 test3 - function not found 변수와 동일한 함수가 실행되는 것을 확인할 수 있다. 즉 함수 call point 를 꼭 fixed하지 않고 상황에 따라서 가변적으로 함수를 c.. 2022. 3. 4.
[PHP] URI '/'(slash) 중복 처리 / preg_replace, 정규식 URI '/'(slash) 중복 처리 URI를 처리하다보면 또는 문자열 처리를 하다보면 '/' (slash)를 사용자(또는 동료 개발자)가 중복으로 입력하는 경우가 종종 생긴다. 실수 또는 string merge 등등의 경우에 경로 끝에 / 처리하고 붙이는 string 선두에 / 이 있다던지.. 어쨌든 중복된 / 를 정규식을 이용하여 없애려고 한다. 소스코드 결과 string(23) "//api////device//status" string(18) "/api/device/status" 정규패턴에서 나타내는 #//+# 은 # : escape character 를 있는 그대로 사용한다 라는 의미. /를 \/ 이렇게 표현하지 않아도 되도록.. + : multiple 이란 의미, {//, }과 같고 //, //.. 2022. 3. 4.
[PHP] nested JSON key 추출 / 재귀함수 활용, recursive call nested JSON 변환 PHP에서 재귀 함수를 이용해 nested 구조의 key들을 /로 구분 짓는 URI string으로 변환하는 예제이다. 이 또한 Restful API 구현에 필요한 기능의 일부이니 활용 가능한 환경이라면 도움이 되길 바란다. 이전에 python 으로 작성한 변환 방식과 유사하니 참고. https://muabow.tistory.com/327 [PYTHON] nested JSON 변환 / comparing two nested JSON nested JSON 변환 예제 1. 재귀를 이용해 nested 구조의 key들을 flat 하게 만들어서 dictionary에 key/value 로 저장을 하는 예제이다. 소스코드 """ # JSON data format { "Key_A": "A", .. 2022. 3. 3.
[C++] 프로그래머스, 베스트앨범 타이틀 코딩테스트 연습 > 해시 > 베스트앨범 문제 설명 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 많이 재생된 장르를 먼저 수록합니다. 장르 내에서 많이 재생된 노래를 먼저 수록합니다. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다. 노래의 장르를 나타내는 문자열 배열 genres와 노래별 재생 횟수를 나타내는 정수 배열 plays가 주어질 때, 베스트 앨범에 들어갈 노래의 고유 번호를 순서대로 return 하도록 solution 함수를 완성하세요. 제한 사항 genres[i]는 고유번호가 i인 노래의 장르입니다. play.. 2022. 2. 23.