c++ string 문자와 string 배열 비교하기 ㅠㅠ

조회수 11394회

제가 string 문자와 string 배열을 비교하고 있는데요

#include <iostream>
#include <string>
int main(){
string subway[] = {"불광", "합정", "마포구청", "망원"};
string a = "망원";
int count = 0;

for(int i=0; i<4; i++){
    if(a.compare(subway[i])==1)
         count++;
    }
}


이렇게 해봤는데 count값이 3이 나오지 않네요 ㅠㅠ

어떻게 고쳐야 할까요 ,,

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • std::string::compare() 의 반환값은 0 또는 0보다큰 또는 0보다작은 값 입니다.

    a.compare(b) 에서

    • 반환값이 0 일 경우 ab 가 동일합니다.
    • 반환값이 0 보다 큰 경우 ab 보다 사전 순서상 뒤에 있습니다.
    • 반환값이 0 보다 작은 경우 ab 보다 사전 순서상 앞에 있습니다.

    그렇기에 a.compare(subway[i])==1 는 의도대로 동작하지 않을 수 있습니다.

    원하시는 결과가 3 인 것을 보면 동일한 문자열이나 사전상 뒤에 있는 문자열일 때를 조건으로 하는 것으로 보입니다.

    따라서 아래와 같이 a.compare(subway[i]) <= 0 으로 변경하면, 망원 보다 사전상 순서가 같거나 뒤에 있는 경우에만 count 가 증가합니다.

    #include <iostream>
    #include <string>
    
    using std::string;
    
    int main(){
        string subway[] = {"불광", "합정", "마포구청", "망원"};
        string a = "망원";
        int count = 0;
    
        for(int i=0; i<4; i++){
            if(a.compare(subway[i]) <= 0)
                 count++;
        }
        std::cout << count;
        return 0;
    }
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)