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

时间:2011-03-04 03:50:17

标签: c character c-strings

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

4 个答案:

答案 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部分的其他答案。