>>1384 Я бы посоветовал следующий подход:
1. Определяем какие символы являются разделителями, а не словами (пробелы, знаки препинания, скобки и т.д.). Либо от обратного - определяем, какие символы могут состовлять слова (например, слово - это последовательность символов алфавита и никаких других).
2. Берём массив указателей на char - по сути массив строк. Назовём его "М".
3. Заводим переключатель "слово|разделитель" (либо это byte - кодируем числами 0 и 1, либо enum -
ну ты понел). Назовём его "П". Начальное значение П = "разделитель".
4. Движемся по исходной строке от
самого первого символа к концу строки, читаем посимвольно. Вооружившись критерием из шага 1 определяем, какой символ мы только что прочитали:
- если это часть слова и П == "разделитель", то мы только что нашли первую букву очередного слова. Запоминаем смещение этого символа в массиве М. П = "слово".
- если это разделитель и П == "слово", то мы только что достигли конца слова. Заменяем в строке текущий символ на \0. П = "Разделитель".
- если прочитанный символ это \0 - выйти из цикла.
5. Имеем М - массив слов. Цикл по i от первого элемента М к предпоследнему. Во вложенном цикле по j идём от (i+1) к последнему. Если элементы i и j - одинаковые, то элемент о помечается как повтор (например, можно записать вместо первого символа \0). Если элемент j помечен как повторяющийся, то переходим к следующей итерации. Аналогично во внешнем цикле если элемент i помечен как повторяющийся, то переходим к следующей итерации.
6. Склеиваем неповторяюшиеся слова из М в новую строку. Всё!