백준 1181번 문제 해결 중 자꾸만 Segfault 가 뜹니다
조회수 505회
segfault가 허용되지 않은 메모리에 접근하는 오류인 것은 알겠는데, 며칠동안 코드를 들여다보아도 찾아낼 수가 없습니다.. 코드가 더럽지만 봐주시면 감사하겠습니다..!!
#include <iostream>
#include <string>
using namespace std;
void dictionary(string* a, string* b)
{
int len = a->length();
for (int i = 0; i < len; i++)
{
string str1 = a->substr(i, 1);
string str2 = b->substr(i, 1);
if (str1 > str2)
{
string temp = *a;
*a = *b;
*b = temp;
break;
}
else
continue;
}
}
void swap(string* a, string* b)
{
string temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int N;
cin >> N;
string str[50];
for (int i = 0; i < N; i++)
cin >> str[i];
string* arr[50];
for (int i = 0; i < N; i++)
arr[i] = &str[i];
while (true)
{
int counter = 0;
for (int j = 0; j < N - 1; j++)
{
int len1 = arr[j]->length();
int len2 = arr[j + 1]->length();
if (len1 > len2)
{
counter++;
swap(arr[j], arr[j + 1]);
}
else if (len1 == len2)
{
int count = 0;
for (int k = 0; k < len1; k++)
{
string str1 = arr[j]->substr(k, 1);
string str2 = arr[j + 1]->substr(k, 1);
if (str1 < str2)
break;
else if (str1 == str2)
continue;
else
{
count++;
break;
}
}
if (count == 0)
continue;
else
{
dictionary(arr[j], arr[j + 1]);
counter++;
}
}
else
continue;
}
if (counter == 0)
break;
else
continue;
}
for (int i = 1; i < N; i++)
{
if (*arr[i - 1] == *arr[i])
arr[i - 1] = NULL;
}
for (int i = 0; i < N; i++)
{
if (arr[i] != NULL)
cout << *arr[i] << endl;
}
return 0;
}
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력