如何从c中的字符串中删除重复?

时间:2011-04-16 08:30:32

标签: c

以下是我尝试删除字符串中重复字符的C代码,但它运行不正常,卡在卡住时卡住了。请帮我理解我做错了什么?

void removeDupliacte(char *str)
{
    int bitset=0;
    int value= 0;
    char *tail = str;
    char temp;
    int i=0;
    while(*str)
    {
        value = *str - 'a';
        if(bitset & (1 << value) > 0 )
        {
            str++;
        }
        else
        {
            bitset |= 1 << value;
            temp = *str;
            tail[i] =temp; /*stuck*/
            i++;
            str++;
        }
    }
tail[i++] = '\0';

}

int main()
{
    char *str = "abac";
    removeDupliacte(str);
    printf("%s",str);
    return 0;
}

2 个答案:

答案 0 :(得分:3)

str是一个const字符串,意思是存储在一个你无法修改的区域(char *str = "abac";tail指向str,你也不能编辑它tail[i] =temp;是试图写入只读区域。

一种解决方案是将str的声明更改为char str[] = "abac";,它将分配一个大小为“abac \ 0”的数组,并将字符串“abac \ 0”复制到它。由于数组位于读写内存中(如果是函数中的数组 - 在堆栈中),您将能够修改字符串。与char *str = "abac";一致,它将字符串放在只读内存中,并将指向字符串的指针分配给str

答案 1 :(得分:1)

此外,您应该尝试将if语句更改为:

if( (bitset & (1 << value)) > 0 )

否则,由于运算符优先级,它没有做它应该做的事情。