까먹어서 다시하는 c++

c++ equals, equal 함수 구현하기- 문자열 비교하기(==, compare, strcmp)

FireStone 2020. 4. 24. 01:22

자바에 익숙해진 나머지 가끔 equals 함수를 쓸 때가 있다..

그래서 c++ 할때는 문자열을 어떻게 비교해야할지 고민이 있었는데,,

c++은 ==을 써도 문자열 비교가 된다고 한다!

그래서 너무 단순하게 끝나버린다..

그래서 compare와 strcmp 함수도 정리해보려 합니다..ㅎ => 속도 비교도 있음

 

  • '=='은 뭐 c++에서는 비교가 가능하다고 하니 패스

  •  compare 함수

  -> string 함수다.

밑에 코드에서 보면 알겠지만 a.compare(b) 의 형태로 사용하고, 두 문자열이 같으면 0을 리턴한다.

string a="aaa"

string b="bbb"

  •  a.compare(b) < 0   => a 의 문자열이 b 보다 사전적의미에서 앞에 있다.
  •  a.compare(b)==0   => 두 문자열이 같다
  • a. compare(b) > 0   => b의 문자열이 a보다 사전적 의미에서 앞에 있다.

코드는 strcmp랑 한번에 보기

 

  • strcmp 함수

#include <string.h>

int strcmp(const char *string1, const char *string2); 

 

-> string 에 대해서는 compare 쓰고 char*에 대해서는 strcmp를 사용하자

strcmp(a,b) ==0 의 형태로 사용하면 되고, compare 와 비슷하다.

 

바로 코드로 ㄱㄱ

#include <iostream>
#include <string>
#include <string.h> //strcmp

using namespace std;
int main(int argc, const char * argv[]) {
    // insert code here...
    string text1="aaa";
    string text2="bbb";
    string text3="aaa";
    const char *str1="aaa";
    const char *str2="bbb";
    
    //compare 함수 사용하기
    if(text1.compare(text2)>0)
        cout<<"aaa > bbb(compare)"<<endl;
    else if(text1.compare(text2)<0)
        cout<<"aaa<bbb(compare)"<<endl;
    
    if(text1.compare(text3)==0)
        cout<<"aaa=aaa(compare)"<<endl;
    
    //strcmp 사용하기
    if(strcmp(str1,str2)>0)
        cout<<"aaa>bbb(strcmp)"<<endl;
    else if(strcmp(str1,str2)<0)
        cout<<"aaa<bbb(strcmp)"<<endl;
    
    if(strcmp(str1,str2)==0)
        cout<<"str1=str2"<<endl;
    
    //==사용하기
    if(text1==text3)
        cout<<"== 으로 해도 됩니다."<<endl;
   
    
    return 0;
}

코드 결과

 

- string이든 char*이든 상관없을 때는 strcmp를 사용하는게 좋다

=> 디버그 빌드할때 속도가 훨씬 빠르다...!