C++에서 문자열 길이를 다룰 때 주로 사용하는 함수인 std::string::size()는 부호 없는 정수 타입인 size_t를 반환합니다. 그런데, size_t와 부호 있는 정수인 int 타입을 혼합하여 연산할 때는 주의해야 합니다. 특히, 문자열 길이를 기준으로 인덱스를 계산하거나 값을 빼는 연산을 할 때 음수가 발생할 수 있습니다.
만약 부호 없는 타입과 부호 있는 타입을 함께 연산하면, 그 결과는 부호 없는 타입으로 변환되는데, 음수가 나오는 경우에는 쓰레기값이 될 수 있습니다.
예를들어,
int i = 2;
string s = "abab";
int result = i - s.size(); // int - size_t 연산
cout << result << endl;
이 경우 i - s.size()의 결과는 원래 음수가 되어야 하지만, size_t가 부호 없는 타입이므로 이 결과는 큰 양수로 변환됩니다. 이는 쓰레기값으로 나타나고, 프로그램에서 예기치 않은 동작을 유발할 수 있습니다.
따라서 s.size()를 연산할 때는 앞에 (int)로 타입 변환을 할 필요가 있습니다.
int result = i - (int)s.size();
이렇게 형 변환을 한다면, 쓰레기값이 뜨지 않게 됩니다 ~^^~
'Algorithm Concepts and C++ Syntax' 카테고리의 다른 글
C++ / cin과 getline의 차이, 그리고 cin.ignore()의 필요성 (0) | 2024.09.28 |
---|---|
[알고리즘] 배낭 정리 문제 (0) | 2024.09.20 |
C++ : 해쉬를 통해 좌표가 있는지 판단할 때., set과 unordered_set자료구조에 대한 이해의 필요성 (0) | 2024.05.21 |
C++ 문자열 비교시 유의할 점 (1) | 2024.05.20 |
c++ hash,key. set과 map (1) | 2023.12.18 |