C# 문자열 비교 C# String Compare

0 투표

● C++과 마찬가지로 C#에도 문자열 비교를 위한 함수는 많이 마련돼 있다. 비록 늘 그랬듯 함수 이름은 같아도 그 기능이 서로 다른 경우가 태반이지만 없는 것에 비하면 감지덕지 아니겠는가.

● 문자열에 사용되는 함수는 어지간하면 String 객체 안에서 모두 끌어 사용할 수 있다. 어떤 것이 있는지 궁금하다면 String까지만 타이핑하고 사용할 수 있는 함수나 변수 등이 뭐가 있는지 직접 살펴볼 수도 있을 것이다.

● 문자열 비교를 위한 주요 함수들.

ⓐ String.Compare(string source, string dest, bool case);:

  문자열을 두 개 받아서 비교를 한 뒤 결과값을 반환해준다. 만약 source보다 dest의 값이 더 크다면 반환되는 값은 어찌됐건 0보다 큰 값을, 그 반대라면 0보다 작은 값을 반환해준다. 즉 source와 dest가 같다면 0을 반환해준다는 것. case는 true일 때 대소문자를 무시한다. 대소문자 구분이 필요없다면 String.Compare(source, dest);를 써도 무방하다.

ⓑ source.CompareTo(string dest);:

  솔직히 CompareTo는 사용해본 적이 없어서 String.Compare()와 비교할 때 그 용도의 차이를 알 수가 없다. 다만 dest를 string이 아닌 object로도 사용할 수 있다는 것 같다. source와 dest 모두가 string일 때에는 반환 규칙도 String.Compare()와 동일하다. msdn에서 언급하길 정렬에 유리하게 사용할 수 있다고 하는데, 뭐... 그렇겠지하고 넘어간다.

ⓒ source.Equals(dest);:

  만약 source와 dest의 값이 같다면 true를 반환하고, 뭐라도 하나만 다르다면 무조건 false를 반환해준다. 문자열이 서로 같은지에 대한 여부만 조사한다면 위에서 다룬 String.Compare()나 String.CompareTo()보다는 String.Equals()가 더 효율적일 것은 뻔하다. 예제는 아래와 같으니 참고하자.

1

2

3

4

5

6

7

8

9

10

string source = "aaaa";

string dest = "aaaa";

string source2 = source;

if(source.Equals(dest)){

    Debug.Log("true");

}

else{

    Debug.Log("false");

}

cs

< 연산 결과 true가 출력될 것이다. >

ⓓ source == dest;:

  둘 모두가 문자열이라면 == 연산자를 통해 서로간을 비교할 수 있다. 그냥 편하게 생각해봐도 C++의 == 연산자와 기능상 다른 것은 없는 것 같다. 포인터를 통해 주소를 추적하고 메모리 주소까지 같으면 true를 반환해주는 듯 하다. 물론 아니라면 false를 반환해줄 것이다. 이는 C++의 문자열에 대한 == 연산자도 동일하게 적용되니 알아두자. 결과적으로 String.Equals()와 == 연산자는 서로 다르게 동작한다는 이야기. 예제는 아래와 같으니 참고하자.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

string source = "aaaa";

string dest = "aaaa";

string source2 = source;

if(source == dest){

    Debug.Log("true");

}

else{

    Debug.Log("false");

}

if(source == source2){

    Debug.Log("true");

}

else{

    Debug.Log("false");

}

cs

 < 연산 결과 false, true가 차례대로 출력될 것이다. >

● 문자열 비교를 위해 사용할 수 있는 함수는 사실 이게 전부가 아니다. 당장 String.Comapre() 함수만해도 오버로딩된 함수의 수가 10개이고(msdn에 표시된 것만) 참조까지 같은지 확인하는 String.ReferenceEqueals() 함수같은 것도 더 있다. 어차피 전부 다 알기도 어렵고 전부 다 쓸 일도 없을테니 때에 맞춰 적당한 것을 새로 익히고 사용하면 되겠지 싶다.

https://msdn.microsoft.com/ko-kr/library/System.String_methods(v=vs.110).aspx

P.S. 그러나 중요한 문제는 이 함수를 모두 살펴봐도 결국 "두 문자열을 비교하여 서로 차이나는 문자의 개수가 몇 개인지는 알 수 없다는 것"이다. 나는 두 문자열 "힘겨루기"와 "힘겨루기에서"를 2/3의 보정률로 같은 문자라 간주하고 싶다. 하지만 위 함수들로는 반드시 두 문자열이 서로 다른 문자열이라는 결과만 도출될 것이다. 여기에 대한 쓸만한 해답은 놀랍게도 System.String이 아니라 System.Linq에 있었다.

당신의 답변

보여지는 당신의 이름 (옵션):
개인정보 보호: 이메일 주소는 이 알림을 발송하기 위해 사용됩니다.
안티-스팸 확인:
앞으로 이 검증을 피하려면,로그인 혹은 가입 하시기바랍니다.
add
...