как удалить дубликат из строки в с? - PullRequest
1 голос
/ 16 апреля 2011

Ниже приведен код 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 ]

3 голосов
/ 16 апреля 2011

str является константной строкой, то есть хранится в области, которую вы не можете изменить (char *str = "abac";) tail указывает на str, и вы также не можете редактировать ее, tail[i] =temp; является попыткой записи только для чтенияarea.

Одним из решений является изменение объявления str на char str[] = "abac";, которое будет выделять массив размером «abac \ 0» и копировать в него строку «abac \ 0».Поскольку массивы находятся в памяти для чтения и записи (в случае массива в функции - в стеке), вы сможете изменить строку.Например, char *str = "abac";, который помещает строку в постоянную память и назначает указатель на строку str.

1 голос
/ 16 апреля 2011

Кроме того, вы должны попробовать изменить выражение if на:

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

В противном случае он не выполняет то, что должен делать из-за приоритета оператора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...