길이가 누구 하나 더 짧은쪽 -1 | 1 반환
비교를 하다가 왼쪽의 아스키 코드 값이 작다면 -1,
오른쪽의 아스키 코드의 값이 더 작다면 1 반환 후 종료
5, 두개의 값이 같다면 0반환.
이거 길이를 비교를 할 필요가 없네
그냥 아무것도 없으면 그것은 '\0' 이니까
짧은게 무조건 이김.
unsigned int GetLen(const wchar_t* str)
{
unsigned int i = 0;
while ('\0' != *(str + i))
{
++i;
}
return i;
}
void strCat(wchar_t* destSrc, unsigned int destLen, const wchar_t* source)
{
int destSrcLen = GetLen(destSrc);
int srcLen = GetLen(source);
if (destSrcLen + srcLen + 1> destLen)
{
printf("Error!\n");
}
for (int i = 0; i < srcLen + 1; ++i)
{
destSrc[destSrcLen + i] = *(source + i);
}
}
int GetCmp(const wchar_t* leftStr, const wchar_t* rightStr)
{
int indexNumLen;
int loopNum = 0;
int result;
int leftLen = GetLen(leftStr);
int rightLen = GetLen(rightStr);
//loopNum = ( leftLen < rightLen ) ? loopNum = leftLen : loopNum = rightLen;
if (leftLen < rightLen)
indexNumLen = rightLen;
else if (leftLen > rightLen)
indexNumLen = leftLen;
else
indexNumLen = leftLen;
// 1. while문을 돈다.
while (loopNum <= indexNumLen)
{
// 2. 같은 인덱스 번호에서 아스키 코드의 값을 비교를 해준다.
int leftValue = *(leftStr + loopNum);
int rightValue = *(rightStr + loopNum);
if (leftValue < rightValue)
{
printf("left가 더 작다\n");
result = 1;
break;
}
else if (leftValue > rightValue)
{
printf("right가 더 작다.\n");
result = -1;
break;
}
else
{
printf("두 수가 같다\n");
result = 0;
}
++loopNum;
}
return result;
}
int main(void)
{
wchar_t left[10] = L"eabcd";
wchar_t right[10] = L"abc";
int result = GetCmp(left, right);
printf("%d\n", result);
return 0;
}
나는 일단 이렇게함
문자형 자료형에 문자 넣은것을
정수형으로 받아오면 그거 아스키 코드 값으로 바뀐다.
아스키 코드로 치면은 b가 c보다 앞쪽에 배치되어있다.
"문자"에 해당하는 실제 숫자이다.
메모리상에 숫자가 들어가 있는 것이다.
문자로 해석했을 때 b, c로 보이는 것 뿐이다.
병신 처럼
loopNum = ( leftLen < rightLen ) ? loopNum = leftLen : loopNum = rightLen;
이렇게 했는데 이게 아니라
loopNum = ( leftLen < rightLen ) ? leftLen : rightLen;
이거 아니노? ㅋㅋ
이렇게 하면 문자열 길이에 따른 우열 차이는 검사하지 못한다.
int GetCmp(const wchar_t* leftStr, const wchar_t* rightStr)
{
int loopNum = 0;
int leftLen = GetLen(leftStr);
int rightLen = GetLen(rightStr);
if (leftLen < rightLen)
return -1;
else if (leftLen > rightLen)
return 1;
// 1. while문을 돈다.
while (true)
{
// 2. 같은 인덱스 번호에서 아스키 코드의 값을 비교를 해준다.
if (*(leftStr + loopNum) < *(rightStr + loopNum))
return -1;
else if (*(leftStr + loopNum) > *(rightStr + loopNum))
return 1;
else
return 0;
++loopNum;
}
}
int main(void)
{
wchar_t left[10] = L"abce";
wchar_t right[10] = L"abc";
int result = GetCmp(left, right);
printf("%d\n", result);
return 0;
}
뭐 이정도로 해주면됨
인자로 const 포인터로 받아주고
그 안에서 비교문으로 if else if 적절히 사용.
끝