일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- ws2_32.lib
- socket
- 코틀린
- 자료구조
- 문자열 다루기
- background service
- InfluxDB
- InfluxDBClient
- Mat 변수
- 문자열다루기
- 연결리스트
- vs code
- dart
- Kotlin
- dictionary
- Linked List
- 소켓프로그래밍
- Android
- C
- 딕셔너리
- foreground service
- 문자열파싱
- 콘솔 키보드 이벤트
- FTP
- vscode
- 메모리반환
- 파일입출력
- 진수변환기
- UI
- flutter
- Today
- Total
목록C - 이걸 굳이?/유틸리티 (17)
무슨 일로 C 하셨습니까?
C하면 자료구조. 자료구조하면 리스트가 아니겠는가 사실상 큐나 스택 트리 그래프 모두 리스트가 베이스라고 생각된다. 고로 리스트를 구현해보자 우선 구조체를 만들어보자 typedef struct NODE{ char* data; struct NODE* link; }node; typedef struct LIST{ int count; struct NODE* body; }list; 이름들은 아주 직관적으로 짓겠다. NODE (body) data 실제 데이터가 저장되는 변수 link 다음 리스트를 가르키는 포인터 LIST (head) count 리스트의 전체 크기 body 실제 리스트를 가르키는 포인터 구조체를 두개로 구현하여 멋을 가미시켜주자 리스트에 저장될 데이터는 숫자일수도 있고 문자일수도 있고 모르는 일이나..

한가롭게 토익준비나 하고 있는데 급하게 처리해야할 일이 생겼다. 엑셀파일에서 특정 특정데이터를 다른 데이터로 바꿔야하는데 엑셀파일을 직접 열어서 수정해도 되고 자동으로 변환해주는 프로그램을 만들어도된다. 일일이 수정하는건 컴공과로써 자존심이 허락하지 않는다 물론 프로그램으로 만들때 C#이나 자바 파이썬으로하면 편할텐데 굳이 C로 구현해야 제맛이기 때문에, 그것도 헤더참조하지 않고 직접해야 제맛이다. 고로 해당 프로그램에 핵심 작업을 하게될 문자열 치환함수를 만들어보겠다. 함수 기능 문자열에서 문자열(문자)를 특정 문자열(문자)로 치환시킴 입력값 source(문자열), From(문자열), To(문자열) 반환값 문자열(Token) 배열 치환된 문자열 char* StringSwitcher(char* Src, ..

솔직히 문자열 다루는 항목에선 가장 고급기술이 아닐까 싶다. 물론 이 기능을 하는 함수도 에 존재하지만 직접 구현해 볼것이다. 간단히 구상해보면 기본 문자열(Source)에서 특정 구분자[문자열/문자](separator)를 기준으로 나누어서 각 문자열들을 배열의 형태로 반환시키도록 할 것이다. 함수 기능 문자열을 특정 문자열(문자)을 기준으로 나눔 입력값 source(문자열), separator(문자열) 반환값 문자열(Token) 배열 나누어진 여러 문자열들 char** g(char* Src, char* Sep) { return NULL; } ( Src : Source / Sep : Separator -> 구분자 ) 함수를 선언해준다. 이전에 만든 함수를 통해 Source에서 Separator가 얼마나 ..

문자열 검색 기능은 실제론 많이 사용해 본적이 없다. 그러나 다음에 구현해 볼 문자열 토큰함수를 위해 미리 구현해야 한다. 구현에 앞서 잠깐 설계를 해보자면 source가 될 문자열과 해당 문자열에서 찾을 문자 혹은 문자열 target, 을 입력하고 반환값으로 source에 target이 얼마나 포함되어있는지와 포함되어있는 인덱스들을 함께 정수형 배열로 반환할 것이다. 함수 기능 문자열에서 특정 문자열의 위치를 찾아내는 함수 입력값 source(문자열), target(문자열) 반환값 정수형 배열 일치하는 위치 수, 각 위치들 함수를 선언해준다 int* f(char* Src, char* Target) { return NULL; } 반환할 정수형 배열의 크기는 1 + n인데 ( n: 문자열이 일치된 위치들,..

string.h 헤더파일을 참조하여 strcmp() 함수를 사용하여 쉽게 문자열을 비교할 수 있다. 그러나 난 굳이 두 문자열을 비교하는 함수를 만들 것이다. 이름 없는 함수부터 만들고 시작하자 #define SAME 0 #define NOT_SAME 1 int f(char* StringA, char* StringB) { return NOT_SAME; } 이번엔 뭔가 느낌있어보이게 상수도 사용해보도록 하자 문자열 비교는 어려울 것이 없다. 문자열 즉 문자 배열에서 각 문자가 일치하는지 확인하면 된다. #define SAME 0 #define NOT_SAME 1 int f(char* StringA, char* StringB) { int LengthA = StringLength(StringA); int Le..
C에도 기본적으로 제공되는 함수들이 매우 많아서 몇개의 헤더파일만 포함시켜도 다양한 함수를 사용할 수 있다. 그런데 난 굳이 직접 만들어서 사용할 것이다. 최소한의 헤더만을 사용해서 이번엔 그 대상을 문자열로 하겠다. 실제로 많은 데이터를 문자열로 다루는데 문자열 함수가 생각보다 많이 불친절하다고 느꼈기 때문에 직접 만들어 쓰겠다. 그 시작은 문자열 합성함수이다. 시작은 이름없는 함수 선언부터 시작한다. char* f(char* HeadString, char* TailString) { return NULL; } 두 문자열을 합해서 반환하는 함수를 구현하겠다. 순서는 당연히 head-tail순이다. int HeadLen = StringLength(HeadString); int TailLen = String..

역시 문체는 그냥 편한대로 하는것이 좋은것 같다 무슨 음슴체는 말도 안되는 소리였던걸로... 10진수를 n진수로, n진수를 10진수로 바꾸는 함수를 구현했다. 하지만 본디 목적은 무엇이겠는가 바로 n진수를 m진수로 바꾸는게 아니겠는가 구현은 간단할 것이다 N진수 → 10진수 → M진수 로 변환시켜주면 간단할 것이다. 앞서 구현한 두 함수를 이용하면 될 것 같다 시작은 마찬가지로 이름없는 함수에서 시작 char* g(char* Number, int FromBit, int ToBit) {} 각 인자는 숫자와 해당 숫자가 몇 진수인지 그리고 몇진수로 변환할지 넘겨주면 되겠다. char* g(char* Number, int FromBit, int ToBit) { int temp = NumberConverter_..
이전 게시물에 이어서 작성하는 게시물. 블로그에 글을 게시할 때 어떤 문체가 좋을지 고민하는 중에 나에게 블로그를 추천해준 사람이 음/슴체가 어울릴것 같다하니 이제부터 음슴체로 게시하겠음 진수 변환기 1.0에 큰 문제가 발견됨 바로 10진수 이상의 진수에서는 정상적으로 작동하지 않음 16진수 표기법에 따라서 10진수 10부터 15까지 각 수는 알파벳 a부터 f 로 표현하는 것이 국룰임 그런데 1.0에서는 알파벳으로의 변환을 고려하지 않음 따라서 수정이 필요함 while (1) { if (Temp_Number == 0) break; int remainder = Temp_Number % ToBit; if (remainder > 9) result[--MSB] = remainder + 'a' - 10; else..