C++

String

Nin 2020. 12. 29. 16:46
#include <isotream>

int main()
{
   char Arr[5] = {"aaaa"};
   char Arr2[5] = {"aaaa"};
   
   if("aaaa" == Arr)
   {
      std::cout << " 두 문자열을 같습니다 " <<std::cout;
   }
   
   if(Arr2 == Arr)
   {
      std::cout << " 두 문자열을 같습니다 " <<std::cout;
   }
}

위와 같은 코드를 실행했을때 " 두 문자열을 같습니다 " 가 출력이 될까?

정답은 출력이 되지 않는다. 


const char* Ptr1 = "aaaa";
const char* Ptr2 = "aaaa";
if (Ptr1 == Ptr2)
{
   std::cout << " 두 문자열을 같습니다 " <<std::endl;
}

이 코드는 if문이 true가 되면서 위의 문자가 출력된다.

위의 배열로 비교했을때는 주소값을 비교하기 때문에 출력이 되지 않는다.


Arr2[0] == Arr[0]
Arr2[1] == Arr[1]
Arr2[2] == Arr[2]
Arr2[3] == Arr[3]
Arr2[4] == Arr[4]

배열끼리 비교를 한다면 위처럼 비교한다고 생각할 수 있지만 

실상은 그렇지 않다.배열의 이름 즉 시작 주소로만 비교를 한다.

"aaaa"와 배열을 비교하는것도 같다. "aaaa"는 코드영역 어딘가에

있으며 그 주소값과 Arr의 주소를 비교한다.

"aaaa"의 주소값이 50이라 가정하고 Arr의 주소값이 100이라 가정하면

50 == 100 이렇게 비교하기 때문에 같을수가 없다.

const char* Ptr1 = "aaaa";
const char* Ptr2 = "aaaa";

이 둘이 true로 같다고 되는 이유 역시 같다.포인터로 "aaaa"의 주소값을

비교하기때문에 50 == 50 이 된다고 생각할 수 있다.

bool Check = true;

for(int i = 0 ; i < 5; ++i)
{
   if(Arr2[i] != Arr[i]
   {
      Check = false;
   }   
}

if(Check == true)
{
}

위의 생각처럼 배열 각각의 값을 비교해서 사용하려면 위의 코드처럼 해줘야 

생각하는것처럼 문자열의 비교값이 나올것이다.


문자열 배열은 위처럼 비교를 주소값 비교를 하고 진짜 문자열이 같은지를

비교하려면 불편하다.그래서 string 이라는 클래스가 만들어져있다.

#include <string>

int main()
{
   std::string NewString1 = "aaaa";
   std::string NewString2 = "aaaa";
   
   if(NewString1 == NewString2)
   {
      std::cout << " 두 숫자배열은 같습니다 " << std::endl;
   }
}

위의 코드는 if문이 true가 들어오면서 같다고 출력된다.

NewString1 += NewString2;

이런 코드도 가능하다. "aaaaaaaa" 결과값이 이렇게 나올것이다.

 

'C++' 카테고리의 다른 글

가상함수 추가설명  (0) 2020.12.31
Virtual Function(가상 함수),다운 캐스팅  (0) 2020.12.31
Vector  (0) 2020.12.29
자료구조  (0) 2020.12.29
정적,동적 바인딩  (0) 2020.12.23