1

在 C 中,如何从另一个数组中删除一个数组中存在的所有字符?

4

4 回答 4

4

听起来像家庭作业,但这里有一个解决方案。

创建一个包含 256 个条目的数组,例如char set[256]. 读取第一个字符串。对于每个字符cset[(unsigned char)c]为 1。读取并复制第二个字符串。对于每个字符c如果set[c]然后跳过c

我忘记并遗漏了您必须先将memset(set, 0, sizeof(set))其任何值设置为 1。

于 2011-03-04T03:56:41.840 回答
2

如果它们是数字:

您不能“删除”它们,但您可以将它们设置为0(或在您的情况下可以表示删除的任何其他值)或创建一个新数组,其中包含不属于两个数组子集的数字。

蛮力方式是使用两个嵌套for循环

如果他们是chars:

您可以通过“移动”-“交换”-“移动”左侧所有不属于公共子集的字符来“删除”它们,然后在正确的位置设置空终止符。(只要您不弄乱字符串文字(char * p = "lala")就可以了)。这几乎会使char常见的s消失。

于 2011-03-04T03:52:44.523 回答
2

假设您要删除 a0 中存在于 a1 中的字符。首先创建一个布尔数组,其中每个索引都是一个字符。前任。如果在 a1 中找到 'c',x['c'] 将为真。然后遍历 a0,检查 x 数组以查看是否应保留或丢弃 char。如果需要,您可以创建一个删除元素的新数组。这应该是一个 O(n) 操作。

于 2011-03-04T04:00:25.160 回答
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部分的其他答案。

于 2011-03-04T04:03:43.863 回答