我正在尝试制作一个程序,其中有一个链表,其中包含不同的城市名称和其他无关紧要的内容。城市名称为“Seattle, Boston, New York, Seattle, Washington, Boston”之类。我的目标是创建一个仅包含唯一城市名称的数组。所以对于给定的例子,它应该是这样的:“Seattle, Boston, New York, Washington”。
我的想法是先制作一个字符串的原始数组,在其中包含所有重复的数据,然后遍历每个城市并使其所有其他出现的地方变为“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);
}
当我调试代码时,没有出现任何错误,但它打印出了所有城市,就好像数组中没有做任何处理一样。
strncpy()
。 - Marco Bonellistrcmp
中,它将raw[j]
与new[i]
进行比较。此时代码中的new[i]
为空。一旦你解决了这个问题,下一个问题就是执行strcpy
的过程中将raw[i]
复制到了new[i]
。应该将其复制到new[k]
中。 - user3386109