728x90
반응형
파이썬은 엄청 쉬웠는데.. 왜 C로 하필 이런 코딩을 하게됐을까..
코딩 많이 될거야..
스트레스 많이 받을거야..

우선 스택 들어 가기 전에 C에서의 문자열 비교
#include <stdio.h>
int strCompare(const char *a, const char *b) {
while (*a && *a == *b) {
a++, b++;
}
return *a - *b;
}
int main() {
char command[100];
scanf("%s", &command);
printf("%d", strCompare(command, "push"));
}
-- 함수 분석 --
int strCompare(const char *a, const char *b)
{
while (*a && *a == *b)
a++, b++;
return *a - *b;
}
첫번째 줄
int strCompare(const char *a, const char *b)
- int → 반환값은 두 문자열의 비교 결과 (0, 음수, 양수)
- const char *a → a는 문자열의 시작 주소를 가리키고, 문자 값은 수정할 수 없다
- const char *b → b도 마찬가지
포인터 이해:
- a = 문자열 시작 주소
- *a = 현재 문자의 값
- a++ = 다음 문자로 포인터 이동
while 문
while (*a && *a == *b)
조건 1: *a
- *a는 a가 가리키는 현재 문자
- *a != '\0' → 문자열 끝이 아니면 계속
- 문자열 끝이면 반복 종료
조건 2: *a == *b
- *a와 *b의 문자 값이 같으면 반복 계속
- 다르면 반복 종료
순차 비교 구조: 항상 문자열의 첫 글자부터 시작
a++, b++;
- a++ → 포인터 a를 다음 문자로 이동
- b++ → 포인터 b도 이동
- 중요: 포인터 주소를 이동하는 것이지, 문자를 변경하는 것이 아님
예제
strCompare("push", "pop");
- 처음: *a='p', *b='p' → 같음 → 이동
- 다음: *a='u', *b='o' → 다름 → 반복 종료
반환문
return *a - *b;
- 현재 포인터가 가리키는 문자를 뺀다
- ASCII 코드로 계산됨
예제 1
"push" vs "pop"
'u' - 'o' = 117 - 111 = 6
예제 2
"app" vs "apple"
'\0' - 'l' = 0 - 108 = -108
예제 3
"apple" vs "apple"
*문자 끝까지 같음 → 0 반환
- *a = 현재 문자 값
- a = 포인터(주소)
- while (*a && *a == *b) = 앞에서부터 한 글자씩 비교
- 다르면 ASCII 차이 반환, 끝까지 같으면 0
728x90
반응형
'coding test - C++' 카테고리의 다른 글
| 백준 / 괄호 / C++ (0) | 2026.02.15 |
|---|---|
| [C++] 배열 (1차원, 2차원 배열 초기화) (0) | 2026.02.10 |