我正在尝试从数组中删除一个字符,但我遇到了问题。我读了如何使用数字来做,但它似乎与删除字符有所不同,因为它不适合我。
如果我有以下数组:
char stuff[][20] = {"one", "two", "three", "four", "five"};
如何删除元素“four”,例如,我可以
{"one", "two", "three", "five"};
答案 0 :(得分:3)
你可以通过动态分配所有需要的内存来做到这一点:char *的数组以及字符串的内存。
然后您可以创建另一个数组,而不删除要删除的项目并复制剩余的所有数据。最后释放原始数组和字符串。
这有点复杂但不太难。如果您可以创建链接列表可能会更容易 - 但这可能会更改您的应用程序逻辑。
答案 1 :(得分:2)
你将不得不复制字符串,并跟踪你认为存在多少字符串,因为分配的空间本身不会消失。
答案 2 :(得分: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", "" }
如果你真的想要更改列表中的元素数量(不仅清除最后一个元素),你将不得不使用不同的策略。
这样的问题通常会引发称为 linked list 的数据结构;列表中的每个元素都明确指向下一个元素。您可以比在数组中更轻松地添加,删除和重新排序链接列表中的元素(即使数组可以用作后备存储)。 Web上有许多(不同质量)的例子。但是,如果你能找到Sedgewick的“C语言算法”的副本,那将是一个更好的资源。