繁体   English   中英

从char数组中删除元素(C)

[英]Removing an element from a char array (C)

我正在尝试从数组中删除字符,但遇到了问题。 我读了如何用数字来做,但是它似乎与删除字符不同,因为它对我不起作用。

如果我有以下数组:

char stuff[][20] = {"one", "two", "three", "four", "five"};     

例如,如何删除元素“四个”,所以我可以

{"one", "two", "three", "five"};   

您可以通过动态分配所有需要的内存来做到这一点:char *数组以及字符串的内存。

然后,您可以创建另一个数组而不删除该项目,然后复制所有剩余数据。 最后释放原始数组和字符串。

这有点复杂,但不太难。 如果可以创建链接列表,可能会更容易-但这可能会改变您的应用程序逻辑。

您将不得不复制字符串,并跟踪您认为存在的字符串数,因为分配的空间本身不会消失。

您不能在C语言中更改数组的大小; 按照声明,您的stuff数组将始终具有5个元素(其中每个元素都是20个元素的char数组)。

可以做的是将第五个元素的内容复制到第四个元素:

strcpy(stuff[3], stuff[4]); // overwrites "four" with "five"

然后清空第五个元素:

strcpy(stuff[4], ""); // zeros out the first element in the subarray

要么

memset(stuff[4], 0, sizeof stuff[4]); // zeros out entire subarray

无论哪种方式,您的数组现在都将包含字符串

{ "one", "two", "three", "five", "" }

如果您确实要更改列表中的元素数量 (而不仅仅是清除最后一个),则必须使用其他策略。

像这样的问题通常需要一种被称为链表的数据结构; 列表中的每个元素都明确指向下一个元素。 您可以比在数组中更轻松地添加,删除和重新排序链表中的元素(即使可以将数组用作后备存储)。 Web上有许多示例(质量各不相同)。 但是,如果您可以找到Sedgewick的“ C算法”的副本,那将是更好的资源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM