요즘 간단한 문제는 코드를 올리지 않고 있는데, c++ 문자열에 대해 몰랐던 사실을 알게 되어서 작성한다.
아래의 코드에서 max를 -1로 설정하고 평소처럼 str.length() 함수를 사용해서 길이를 비교하려고 했는데, 아무리 해도 비교가 반대로 적용이 되었다.
몇 번이고 비교 방향을 점검했는데도 결과가 바뀌지 않아 머리가 멍해졌다.
처음에는 length 함수 대신 size 함수를 사용하는 건가 생각해서 변경했는데 결과는 똑같았다.
그래서 length 함수를 살펴보니 반환 값이 int가 아닌 size_t 값이었다.
찾아보니 size_t 는 unsigned 해서 음의 값을 가지지 않아 비교값이 반대로 나온 것이었다.
max를 0으로 변경하니 정상작동했다.
max를 음수로 설정하거나 문자열의 length 함수를 사용한 적이 아주 많은데 이런 경우는 처음이어서 당황했다.
어떻게 몰랐지..
문제 원인을 찾아보면서 unsigned int 와 size_t의 차이를 정리한 글을 봐서 아래에 첨부한다. 최대 크기에서 차이가 난다고 한다.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<string> vec;
int main()
{
cin.tie(NULL);
cout.tie(NULL);
ios::sync_with_stdio(false);
int max = 0;
for (int i = 0; i < 5; i++)
{
string tmp;
cin >> tmp;
vec.push_back(tmp);
if (tmp.length() > max)
{
max = tmp.length();
}
}
int idx = 0;
string result = "";
while (idx < max)
{
for (int i = 0; i < 5; i++)
{
if (vec[i].length() > idx)
{
result += vec[i][idx];
}
}
idx += 1;
}
cout << result;
}