gpt4 book ai didi

c - 从 char * 数组中删除成员

转载 作者:行者123 更新时间:2023-11-30 18:15:08 25 4
gpt4 key购买 nike

我编写了此函数,用于从索引 idx 处的 arr 中删除 count 个成员。

void remove_int(int (*arr)[], int idx, int count)
{
int i, j;

for (i = 0; i < count; i++)
for (j = idx; (*arr)[j]; j++)
(*arr)[j] = (*arr)[j+1];
}

我这样调用它:

remove_int(&arr, index, cnt);

这对于本地整数来说非常有效。这是我的问题。我有一个像这样的头文件:

struct {
/* other stuff */
char *array[100];
} global_struct;

数组中的成员已分配并填充。

有人认为我可以将 int 切换为 char 并将 int (*arr)[] 切换为 char *(*arr )[],然后调用:

remove_char(&global_struct.array, index, cnt);

我尝试过,但它实际上并没有修改global_struct.array。我应该如何更改 remove_int 以与 global_struct.array 一起使用?

最佳答案

global_struct.array 是一个指向 char 的指针,看起来它旨在指向一个字符串。因此,您需要将函数签名更改为:

void remove_strings(char *str[], size_t idx, size_t count);

我建议将 idxcountij 更改为 size_t,因为这是一个无符号整数类型,保证保存任何数组索引。 size_t 类型自 C99 起可用。

这是一个演示程序,其中包含 remove_int() 函数的修改版本:

#include <stdio.h>

struct {
char *array[100];
} global_struct;

void remove_strings(char *str[], size_t idx, size_t count);

int main(void)
{
global_struct.array[0] = "One";
global_struct.array[1] = "Two";
global_struct.array[2] = "Three";
global_struct.array[3] = "Four";
global_struct.array[4] = "Five";
global_struct.array[5] = NULL;

for (size_t i = 0; global_struct.array[i]; i++) {
printf("%s\n", global_struct.array[i]);
}

remove_strings(global_struct.array, 2, 2);

putchar('\n');
puts("After removal:");
for (size_t i = 0; global_struct.array[i]; i++) {
printf("%s\n", global_struct.array[i]);
}

return 0;
}

void remove_strings(char *str[], size_t idx, size_t count)
{
size_t i, j;

for (i = 0; i < count; i++)
for (j = idx; str[j]; j++)
str[j] = str[j+1];
}

程序输出:

One
Two
Three
Four
Five

After removal:
One
Two
Five

此外,您的函数 remove_int() 似乎仅适用于排除 0 成员的 int 数组,如 0 用作函数内部循环中的哨兵值。正如我所做的那样,通常使用 NULL 指针终止指向 char 的指针数组,当然字符串也是 char 数组code> 以 '\0' 终止。但是,通常来说,以零终止 int 数组并不是一个好主意。代码的这一功能确实使使其能够轻松处理字符串。

虽然您的函数可能满足您当前的要求,但请考虑将其更改为返回数组中存储的 int 数。跟踪存储在数组中的 int 数量是有意义的,并且将此值作为参数传递允许函数在没有哨兵值的情况下迭代数组。这是您的函数的修订版本:

size_t remove_ints(size_t idx, size_t count, int arr[], size_t arr_sz)
{
size_t i, j;

for (i = 0; i < count; i++)
for (j = idx; j < arr_sz; j++)
arr[j] = arr[j+1];

return arr_sz - count;
}

关于c - 从 char * 数组中删除成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41560449/

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