我试图从数组中删除char,并且遇到问题。我读了如何用数字做它,但它似乎不同于删除字符,因为它不适合我。从char数组中删除元素(C)
如果我下面的数组:
char stuff[][20] = {"one", "two", "three", "four", "five"};
我怎样才能删除元素“四大”为例,这样我就可以得到
{"one", "two", "three", "five"};
我试图从数组中删除char,并且遇到问题。我读了如何用数字做它,但它似乎不同于删除字符,因为它不适合我。从char数组中删除元素(C)
如果我下面的数组:
char stuff[][20] = {"one", "two", "three", "four", "five"};
我怎样才能删除元素“四大”为例,这样我就可以得到
{"one", "two", "three", "five"};
您可以通过动态分配所有需要的内存来执行此操作:char *数组以及字符串内存。
然后,您可以创建另一个阵列,而不需要删除项目并复制剩下的所有数据。最后释放原始数组和字符串。
这有点复杂但不太难。如果你可以创建一个链表 - 可能会更容易 - 但这可能会更多地改变你的应用程序逻辑。
这很难吗?我的意思是,是不是有一个“删除”功能,使用索引,你可以删除该元素? –
@Borja,不。 C编程有很多“自己动手”。 –
我明白了。如果我使用矢量而不是阵列来做这件事会更容易些? –
您不能更改C中数组的大小;如声明的,你的stuff
数组总是有5个元素(其中每个元素都是char
的20个元素的数组)。
什么你可以做的是第五种元素的内容复制到第四个元素:
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算法”的副本,那将是更好的资源。
是的,我需要改变元素的数量,所以索引也会改变。感谢您的建议。将尝试链接列表。 –
让编译器为你计算'char stuff [] [20] = ...' –
你如何用整数来做到这一点?这与字符串没什么不同(只记得一个字符串是一个数组) – pmg