在C中,如何从另一个数组中删除一个数组中的所有字符?
答案 0 :(得分:4)
听起来像是家庭作业,但这是一个解决方案。
创建256个条目的数组,例如char set[256]
。
读第一个字符串。对于每个字符c
,将set[(unsigned char)c]
设置为1。
读取并复制第二个字符串。对于每个字符c
,如果set[c]
,则跳过c
。
我忘了并忘记在将其任何值设置为1之前必须先memset(set, 0, sizeof(set))
。
答案 1 :(得分:2)
如果他们是数字:
您不能“删除”它们,但您可以将它们设置为0
(或任何其他可以代表删除的值)或创建一个包含不属于的数字的新数组两个数组的子集。
蛮力方式是使用两个嵌套的for
循环
如果是char
s:
你可以通过“移动” - “交换” - “移动”所有不属于左边公共子集的字符来“移除”它们,然后将空终止符设置在正确的位置。 (只要你不乱用字符串文字(char * p = "lala"
),这很好)。这几乎会使常见的char
消失。
答案 2 :(得分:2)
假设您要删除a1中存在的a0中的字符。首先创建一个布尔数组,其中每个索引都是一个字符。恩。如果在a1中找到'c',x ['c']将为真。然后遍历a0,检查x数组以查看是否应该保留或抛出char。如果需要,您可以创建一个新元素,并删除元素。这应该是O(n)操作。
答案 3 :(得分:1)
void remove_repeated(char* s, char* another)
{
// ... preparation with another... see other answers
for (pos = p = s; *p != 0; p++)
{
if (!macro_is_repeated(*p))
*pos++ = *p;
}
*pos = 0;
}
请参阅is_repeated
部分的其他答案。