Я пытаюсь создать программу, в которой у меня есть связанный список с разными названиями городов + некоторые другие не относящиеся к делу вещи. Названия городов есть, например. «Сиэтл, Бостон, Нью-Йорк, Сиэтл, Вашингтон, Бостон». Я пытаюсь создать массив, в котором есть только уникальные названия городов. Итак, для данного примера это было бы так: «Сиэтл, Бостон, Нью-Йорк, Вашингтон».
Моя идея состояла в том, чтобы создать необработанный массив строк, который будет просто необработанными данными со всеми дубликатами и затем go через каждый город и сделать все остальные появления "NULL". По какой-то причине это не работает должным образом, я понятия не имею, почему. это мой код:
void city_list(City *head)
{
City *temp = head;
char** names_raw;
char** names_new;
int num_names = 100;
int curr_pos = 0;
names_raw = malloc(num_names * sizeof(char*));
for(int i = 0; i < num_names; i++)
{
names_raw[i] = malloc(256 * sizeof(char));
}
while(temp != NULL)
{
strcpy(names_raw[curr_pos++], temp->name);
temp = temp->next;
}
names_new = malloc(num_names * sizeof(char*));
for(int i = 0; i < num_names; i++)
{
names_new[i] = malloc(256 * sizeof(char));
}
for(int i = 0; i < curr_pos; i++)
{
if(strcmp(names_raw[i], "NULL"))
{
for(int j = i+1; j < curr_pos; j++)
{
if(!strcmp(names_raw[j], names_new[i]))
{
strcpy(names_raw[j], "NULL");
}
}
strcpy(names_new[i], names_raw[i]);
}
}
for(int i = 0; i < curr_pos; i++)
{
printf("%s\n", names_new[i]);
}
free(names_raw);
free(names_new);
}
Когда я отлаживаю код, я не получаю никаких ошибок, но он выводит все города, как будто ничего не было сделано с массивом.