wcscmp (두 와이드 문자열의 크기를 비교), (문자열의 각 첫번째, 각 두번째... 이렇게 비교함 ex) abc, def가 있으면 abc < def 이런식으로 가는거임)
int result = wcscmp(s1, s2);
일때
wcscmp
함수는 Null 종료된 wide character 문자열(두 번째 인수로 전달되는 문자열)을 비교하여 그 결과를 반환합니다. 함수의 작동 방식은 다음과 같습니다:
첫 번째 문자열(
s1
)의 첫 번째 문자와 두 번째 문자열(s2
)의 첫 번째 문자를 비교합니다.비교 결과에 따라 다음과 같은 세 가지 경우를 고려합니다:
s1
의 첫 번째 문자가s2
의 첫 번째 문자보다 작을 경우, 음수 값을 반환합니다.s1
의 첫 번째 문자가s2
의 첫 번째 문자보다 클 경우, 양수 값을 반환합니다.s1
의 첫 번째 문자와s2
의 첫 번째 문자가 같을 경우, 다음 문자들을 계속 비교합니다.비교가 진행되는 동안 다음과 같은 경우를 고려합니다:
s1
의 현재 문자와s2
의 현재 문자가 다르다면, 해당 문자들의 아스키 코드 값을 비교하여 결과를 반환합니다.s1
이나s2
중 하나가 끝에 도달하면, 문자열 길이의 차이에 따라 결과를 반환합니다:
s1
이s2
보다 짧을 경우, 음수 값을 반환합니다.s1
이s2
보다 길 경우, 양수 값을 반환합니다.- 두 문자열의 길이가 같을 경우, 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;
}