- push_swap에서는 처음 시작할때 정렬해야할 음수, 양수, 0 의 값들을 받아온 뒤 유효한 값들을 a배열에 순서대로 넣어주어야함
- 이때 다양한 형식, 숫자 이외의 문자 등등의 여러가지 값들이 들어올 수 있기때문에 이러한 값들을 잘 선별해주어야함
구현해야 할것
- 2 1 3 같은 형식이아닌 "2 1 3"처럼 하나의 문자열로 들어오는것도 받아줘야함
- 2 "1 3" 6 5 같이 섞여 들어와도 받아줘야함
- 음수가 들어와도 받아줘야함
- 숫자 이외의 문자가 들어올 시 에러
- 아무런 값이 들어오지 않을 시 에러
- 중복된 값이 들어올 시 에러
예시
$> ./push_swap 2 1 3 6 5 -8
$> ./push_swap 2 1 3 6 5 8 3
Error
$> ./push_swap "2 -1 -3 6" 5 8
$> ./push_swap 2 "1 3 6 two" 5 8
Error
$> ./push_swap 2 "1 3" 6 -5 8
$> ./push_swap 2 1 3 6 5 one 8
Error
구현
무결성 검사
int check_argv(int argc, char **argv)
{
int i;
char *str;
i = 1;
if (argc == 1)
return (return_error("Error"));
while (i != argc)
{
str = argv[i];
while (*str)
{
if (*str == '-' || *str == '+' )
{
str++;
if (*str < '0' || *str > '9')
return (return_error("Error"));
}
else if (*str != ' ' && (*str < '0' || *str > '9'))
return (return_error("Error"));
if (*str)
str++;
}
i++;
}
return (0);
}
Deque에 값 저장
int push_in_deq(int argc, char **argv, t_deque *deq)
{
int i;
i = 1;
while (i != argc)
{
if (check_str_num(argv[i]))
{
if (push_node_for_list(deq, argv[i]))
return (1);
}
else
{
if (push_node_back(deq, ft_atoi(argv[i])))
return (1);
}
i++;
}
return (0);
}
int push_node_for_list(t_deque *deq, char *argv)
{
char **num_list;
int i;
i = 0;
num_list = ft_split(argv, ' ');
if (num_list == NULL)
return (1);
while (num_list[i] != NULL)
{
if (push_node_back(deq, ft_atoi(num_list[i])))
{
free_list(num_list);
return (1);
}
i++;
}
free_list(num_list);
return (0);
}