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

4

是否有C函数可以从char*数组中删除第N个元素?

例如:

char* tab --> |5|4|5|1|8|3|

remove_elt(tab, 3) --> 5|4|5|8|3|


1
不,但编写一个非常简单。 - paddy
我知道这很简单,但我想问一下是否有现成的函数。如果没有,我会接受带有实现的答案。 - JosephConrad
如果你知道数组的结尾,那么从技术上讲是可以使用memmove函数的。我猜我们谈论的是一个已知大小的数组,而不是以空字符结尾的字符串。 - paddy
2个回答

8

这个问题的描述有点不清楚。你暗示它不是一个字符串,但是在你想象的函数调用中没有指定数组大小。这会导致当前答案将数据视为以null结尾的字符串。

一个更好的答案应该意识到你不需要调用strlen

void remove_elt(char *str, int i)
{
    for(; str[i]; i++) str[i] = str[i+1];
}

但如果这是一个存储大小的数组(而不是使用0作为结束标记),那么您需要向函数提供该大小。在这种情况下,您可以使用memmove来复制重叠的内存:

void remove_elt( char *str, int elem, int *size )
{
    if( elem < --*size ) {
        memmove( &str[elem], &str[elem + 1], *size - elem );
    }
}

6
你可以制作一个:

您可以创建一个:

void remove_elt(char *str, int i) {
    int len = strlen(str);

    for (; i < len - 1 ; i++)
    {
       str[i] = str[i+1];
    }

    str[i] = '\0';
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接