从char数组中删除成员*

MD XF

我已经编写了此函数以countarrindex处删除成员idx

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;

中的成员array已分配并填补。

有人认为我可以切换intchar切换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);

我建议改变idxcounti,和j向型size_t,因为这是一个unsigned保证持有任何数组索引整数类型。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()只对int那些排除0成员的数组起作用,就像0在函数的内部循环中用作哨兵值一样。这是常见的终止指针数组以charNULL指针,如我已经做了,当然一个字符串是阵列char与终止小号'\0'但是,将ints数组终止为零通常不是一个好主意您的代码的这一功能确实使将其修改为与字符串一起使用变得很简单。

尽管您的函数可能满足您当前的要求,但请考虑对其进行更改以返回int存储在数组中s跟踪int存储在数组中s的数目是有意义的,并将此值作为参数传递允许函数在没有哨兵值的情况下遍历数组。这是您的功能的修订版:

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;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么成员函数中的char数组类型的类成员突然变成const char数组类型?

来自分类Dev

从C中的char *数组中删除空格

来自分类Dev

从C中的char *数组中删除空格

来自分类Dev

删除类数组的成员

来自分类Dev

从排序的char数组中删除重复项

来自分类Dev

C标准中char数组结构成员的对齐

来自分类Dev

Kotlin:删除数组中相同的相邻成员

来自分类Dev

struct中的char数组成员-复制到这两个成员的值

来自分类Dev

Javascript:删除json数组的成员

来自分类Dev

如何从VB.NET中的char数组中删除元素?

来自分类Dev

从C中的char数组中删除颜色代码

来自分类Dev

从char数组中删除重复的单词(仅在遵循时)

来自分类Dev

从数组(char *)中删除第n个元素

来自分类Dev

我应该删除.h文件中的char数组吗?

来自分类Dev

从char数组中删除字符时出现问题

来自分类Dev

如何从char数组中删除标点符号?

来自分类Dev

使用memcpy将int复制到char数组中,然后打印其成员:undefined behaviour?

来自分类Dev

C ++中的struct char数组成员初始化

来自分类Dev

删除char **数组的正确方法

来自分类Dev

删除char **数组的正确方法

来自分类Dev

Haskell:从元组中删除成员

来自分类Dev

在C ++中正确删除成员数组

来自分类Dev

为什么在构造函数初始化程序中初始化 const char 数组成员不兼容?

来自分类Dev

用char数组成员填充并集

来自分类Dev

填充包含char **数组作为成员C的结构

来自分类Dev

对char数组结构成员进行类型操作

来自分类Dev

是否需要显式构造char数组的每个成员?

来自分类Dev

用char数组成员填充并集

来自分类Dev

具有弹性char数组成员的结构

Related 相关文章

热门标签

归档