31. wcscmp 함수

P4·2023년 6월 15일
0
post-thumbnail

wcscmp 함수의 원리

wcscmp (두 와이드 문자열의 크기를 비교), (문자열의 각 첫번째, 각 두번째... 이렇게 비교함 ex) abc, def가 있으면 abc < def 이런식으로 가는거임)

  • int result = wcscmp(s1, s2); 일때

wcscmp 함수는 Null 종료된 wide character 문자열(두 번째 인수로 전달되는 문자열)을 비교하여 그 결과를 반환합니다. 함수의 작동 방식은 다음과 같습니다:

  1. 첫 번째 문자열(s1)의 첫 번째 문자와 두 번째 문자열(s2)의 첫 번째 문자를 비교합니다.

  2. 비교 결과에 따라 다음과 같은 세 가지 경우를 고려합니다:

    • s1의 첫 번째 문자가 s2의 첫 번째 문자보다 작을 경우, 음수 값을 반환합니다.
    • s1의 첫 번째 문자가 s2의 첫 번째 문자보다 클 경우, 양수 값을 반환합니다.
    • s1의 첫 번째 문자와 s2의 첫 번째 문자가 같을 경우, 다음 문자들을 계속 비교합니다.
  3. 비교가 진행되는 동안 다음과 같은 경우를 고려합니다:

    • s1의 현재 문자와 s2의 현재 문자가 다르다면, 해당 문자들의 아스키 코드 값을 비교하여 결과를 반환합니다.
    • s1이나 s2 중 하나가 끝에 도달하면, 문자열 길이의 차이에 따라 결과를 반환합니다:
      • s1s2보다 짧을 경우, 음수 값을 반환합니다.
      • s1s2보다 길 경우, 양수 값을 반환합니다.
      • 두 문자열의 길이가 같을 경우, 0을 반환합니다.

    이렇게 wcscmp 함수는 문자열을 비교하며, 비교 결과에 따라 음수, 양수 또는 0을 반환합니다. 이 값은 문자열이 정렬된 순서를 나타냅니다.


코드

#include <stdio.h>
#include <wchar.h>

int StrCmp(const wchar_t* str1, const wchar_t* str2);
unsigned int GetLength(const wchar_t* _pstr);

int main(void)
{
	wchar_t string1[] = L"asdasdddd";
	wchar_t string2[] = L"asdasdccc";

	int resultStr = StrCmp(string1, string2);

	printf("%d", resultStr);

	return 0;
}

int StrCmp(const wchar_t* str1, const wchar_t* str2)
{
	int iReturn = 0;
	int left = GetLength(str1);
	int right = GetLength(str2);

	if (left < right)
	{
		iReturn = -1;
	}
	else if (left > right)
	{
		iReturn = 1;
	}
	else
	{
		iReturn = 0;
	}

	int iLoop = left < right ? left : right;
	// 참이면 left, 거짓이면 right

	for (int i = 0; i < iLoop; ++i)
	{
		// 0보다 작으면 왼쪽 승리
		if (str1[i] < str2[i])
		{
			return -1;
		}
		else if (str1[i] > str2[i])
		{
			return 1;
		}
	}

	return iReturn;

}

unsigned int GetLength(const wchar_t* _pstr)
{
	int i = 0;
	int a = 1;

	while (a != 0)
	{
		a = _pstr[i];
		i++;
	}

	return i - 1;

}
profile
지식을 담습니다.

0개의 댓글