coding test - C++

C 문자열이 동일한지 비교 (포인터) / C++ strcmp(a, b) 에서 a == b 이면 0 을 반환함 - 아스키코드 차이로 같은 문자열인지 확인하기

sillon 2026. 2. 15. 20:15
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");
  1. 처음: *a='p', *b='p' → 같음 → 이동
  2. 다음: *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
반응형