C удалить дубликаты символов из массива - PullRequest
0 голосов
/ 05 апреля 2011

Где-то в моей программе я получаю следующие выходные данные:

ee

или:

thht

В основном я хочу удалить дубликаты, чтобы получить e или th.Я получил этот код:

j = 0;
for (i = 1; i < strlen(erros); i++)
{
    if (erros[j] != erros[i])
    {
        erros[j+1] = erros[i];
        j++;
    }
}

Этот код дает мне e и tht.Если в первом случае все нормально, во втором нет.Я полагаю, что это связано с тем, что у меня нет отсортированного массива.

Есть ли способ, без сортировки массива и использования приведенного выше кода, получить желаемый результат?

1 Ответ

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

Вы можете создать массив флагов, по одному для каждого возможного значения символа.При первом обнаружении определенного значения символа установите флаг.В следующий раз, когда вы встретите это значение, будет установлен флаг, указывающий, что вы можете удалить этот символ.

По строкам (не проверено):

int flags[1 << CHAR_BIT];
memset(flags, 0, sizeof(flags));
j = 0;
for (i = 0; i < strlen(erros); i++)
{
    erros[j] = erros[i];  // Always copy, it's simpler
    if (!flags[erros[i]])
    {
        j++;
    }
    flags[erros[i]] = 1;  // Always set the flag, it's simpler
}
erros[j] = '\0';

ПримечаниеВы забыли установить терминатор NULL в вашей строке.

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