gpt4 book ai didi

arrays - 如何从c中的字符串数组中删除重复的字符串

转载 作者:行者123 更新时间:2023-12-04 04:02:25 25 4
gpt4 key购买 nike

我正在尝试制作一个程序,其中我有一个链接列表,其中包含不同的城市名称以及其他一些不相关的内容。例如,城市名称是。 “西雅图、波士顿、纽约、西雅图、华盛顿、波士顿”。我想做的是制作一个只有城市唯一名称的数组。因此,对于给定的示例,它将是:“西雅图、波士顿、纽约、华盛顿”。

我的想法是制作一个原始字符串数组,它只是包含所有重复项的原始数据,然后遍历每个城市并使它们的所有其他外观都为“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);
}

当我调试代码时,我没有收到任何错误,但它会打印出所有城市,就像没有对数组进行任何操作一样。

最佳答案

您没有向我们展示完整的示例(什么是“城市”?您的输入数组是如何构建的?等等)。但我怀疑你把事情搞得太复杂了:(

建议:

  1. 将您的数组传递到名为 int delete_dupes(char* arr[], int n)(或类似函数)的函数中

  2. 对数组进行排序:

    示例代码:https://www.geeksforgeeks.org/c-program-sort-array-names-strings/

  3. 通过将重复项移动到数组的前面来“删除”重复项

    int delete_dupes(char* arr[], int n) {
    char *current_name = arr[0];
    int i=1, j=1;
    while (i < n) {
    if (strcmp(arr[i], current_name) != 0) {
    free(arr[j]); /* Do *NOT* do this if you didn't malloc() this string!!!! */
    arr[j++] = arr[i];
    current_name = array[i];
    }
    }
    return j;
    }
  4. 该函数返回新的#/strings。该数字将是 <= n。

    此外,您可能希望清空未使用的数组元素和/或释放重复的字符串值。

  5. “理想”的解决方案是实现动态列表。

  6. 如果您想单独“malloc()”每个字符串,请考虑标准 C 库函数 strdup() .

不,我还没有测试过:)

关于arrays - 如何从c中的字符串数组中删除重复的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62884689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com