0

我正在尝试从数组中删除一个字符,但我遇到了问题。我读过如何用数字来做,但它似乎与删除字符不同,因为它不适合我。

如果我有以下数组:

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

例如,如何删除元素“四”,这样我就可以得到

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

3 回答 3

3

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

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

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

于 2013-05-21T14:10:15.247 回答
2

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

于 2013-05-21T14:03:23.680 回答
1

你不能改变 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", "" }

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

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

于 2013-05-21T18:17:57.477 回答