c++ - 정렬 - 문자열 포인터 비교



문자열을 사전 식으로 비교하기 (2)

문자열을 비교하기 위해 C ++에서 ">"및 "<"와 같은 연산자를 사용하면 사전 식으로 비교할 수 있지만 문제는 이것이 내 컴퓨터에서만 가끔 발생한다는 것입니다. 예를 들어

if("aa" > "bz") cout<<"Yes";

이렇게하면 아무 것도 인쇄되지 않고 필요한 내용이 출력되지만 입력하면

if("aa" > "bzaa") cout<<"Yes";

그러면 "예"가 인쇄됩니다. 왜 이런 일이 발생합니까? 또는 문자열을 사전 식으로 비교하는 데 사용해야하는 다른 방법이 있습니까?

https://code.i-harness.com


비교 std::string -s 작동합니다. 그러나 문자열 리터럴을 비교하고 있습니다. 비교를하려면 std :: string을 초기화하거나 strcmp를 사용하십시오.

if(std::string("aa") > std::string("bz")) cout<<"Yes";

이것은 C ++ 스타일의 솔루션입니다.

또는 대안 :

if(strcmp("aa", "bz") > 0) cout<<"Yes";

편집 (Konrad Rudolph의 의견에 감사) : 사실 첫 번째 버전에서는 피연산자 중 하나만 명시 적으로 변환해야합니다.

if(std::string("aa") > "bz") cout<<"Yes";

다시 예상대로 작동합니다.


char const * 유형의 "프리미티브"문자열을 비교하고 있습니다.

다음은 본질적으로 예제와 동일합니다.

char const * s1 = "aa";
char const * s2 = "bz";
if ( s1 > s2 ) cout<<"Yes";

이것은 포인터 (문자열의 메모리 주소)가 아닌 내용을 비교합니다.

@izomorphius는 좋은 해결책을 제안했습니다.





compare