Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- InfluxDBClient
- Linked List
- dictionary
- 코틀린
- 문자열다루기
- Kotlin
- dart
- background service
- Android
- 진수변환기
- 문자열파싱
- socket
- 연결리스트
- 문자열 다루기
- flutter
- 콘솔 키보드 이벤트
- FTP
- Mat 변수
- C
- 메모리반환
- foreground service
- UI
- 딕셔너리
- 소켓프로그래밍
- 자료구조
- InfluxDB
- ws2_32.lib
- 파일입출력
- vscode
- vs code
Archives
- Today
- Total
무슨 일로 C 하셨습니까?
[C] 문자열 다루기::문자열 비교 본문
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 LengthB = StringLength(StringB);
for (int i = 0; i < LengthA; i++) {
if (StringA[i] != StringB[i])
return NOT_SAME;
}
return SAME;
}
단순히 쭉 비교해서 같은지 다른지만 체크해 주면 되겠다.
그런데 같은지 다른지 뿐만 아니라 두 문자열의 우위를 비교하고 싶을 수도 있다.
사실 후에 정렬을 만들게 되면 사전적으로 두 문자열을 비교할 일이 생길 것 같다.
#define COMPARE_SRC -1
#define COMPARE_SAME 0
#define COMPARE_DST 1
int f(char* StringA, char* StringB) {
int LengthA = StringLength(StringA);
int LengthB = StringLength(StringB);
if (LengthA == 0) {
if (LengthB == 0) return COMPARE_SAME;
return STRING_SRC;
}
else if (LengthB == 0) return COMPARE_DST;
int i = 0;
while (1) {
if (StringA[i] < StringB[i]) return COMPARE_SRC;
else if (StringA[i] > StringB[i]) return COMPARE_DST;
else if (StringA[i] == StringB[i] && StringA[i] == 0) return COMPARE_SAME;
i++;
}
}
그렇다면 일단 상수를 세가지 경우로 나눈 후 각 문자를 비교해서 상황에 맞게 비교하면 되겠다.
이때 COMPARE_SRC는 왼쪽 문자열이 더 작은경우, COMPARE_DST는 오른쪽 문자열이 더 작은경우를 의미한다.
(SRC는 source, DST는 destination을 의미한다.)
* 비교하는 문자는 ASCII 코드를 기준으로 비교하므로 대문자가 소문자 보다 더 크게 인식된다.
마지막으로 함수이름과 파라미터를 의미에 맞게 적절히 변경시켜주면 되겠다.
int StringCompare(char* Src, char* Dst)
(Src -> Source, Dst -> Destination, Compare -> 비교하다)
이 함수가 정상 작동하는지는 직접 테스트해보길 바란다
'C - 이걸 굳이? > 유틸리티' 카테고리의 다른 글
[C] 문자열 다루기::문자열 파싱 (0) | 2020.09.04 |
---|---|
[C] 문자열 다루기::문자열 검색 (0) | 2020.09.04 |
[C] 문자열 다루기::문자열 합성 (0) | 2020.08.25 |
[C] 진수 변환기__2.0(Final) (0) | 2020.08.21 |
[C] 진수 변환기__1.1 (0) | 2020.08.20 |
Comments