在 C 中,如何从另一个数组中删除一个数组中存在的所有字符?
4 回答
听起来像家庭作业,但这里有一个解决方案。
创建一个包含 256 个条目的数组,例如char set[256]
. 读取第一个字符串。对于每个字符c
集set[(unsigned char)c]
为 1。读取并复制第二个字符串。对于每个字符c
如果set[c]
然后跳过c
。
我忘记并遗漏了您必须先将memset(set, 0, sizeof(set))
其任何值设置为 1。
如果它们是数字:
您不能“删除”它们,但您可以将它们设置为0
(或在您的情况下可以表示删除的任何其他值)或创建一个新数组,其中包含不属于两个数组子集的数字。
蛮力方式是使用两个嵌套for
循环
如果他们是char
s:
您可以通过“移动”-“交换”-“移动”左侧所有不属于公共子集的字符来“删除”它们,然后在正确的位置设置空终止符。(只要您不弄乱字符串文字(char * p = "lala"
)就可以了)。这几乎会使char
常见的s消失。
假设您要删除 a0 中存在于 a1 中的字符。首先创建一个布尔数组,其中每个索引都是一个字符。前任。如果在 a1 中找到 'c',x['c'] 将为真。然后遍历 a0,检查 x 数组以查看是否应保留或丢弃 char。如果需要,您可以创建一个删除元素的新数组。这应该是一个 O(n) 操作。
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
部分的其他答案。