есть текст и смайлики ": )", ": (" и "{ : )"
посимвольно читаем текст, есть несколько состояний, входной символ в переменной "с"
1) (начальное состояние)
(с == ":") -> 2
(c == "{") -> 3
иначе подаем на выход c и не меняем состояние
2)
(с== ")"), выдаём смайлик
и переходим в 1
(с == "("), выдаём смайлик
и переходим в 1
(с== "{") выводим ":" (это не кусок смайлика), переходим в 3
иначе выводим ":" + c и переходим в 1
3)
(с == ":") -> 4
иначе выводим "{" + c и переходим в 1
4)
(с == ")") выводим смайл "{
", переходим в 1
(c == "("), выводим "{" + "
", переходим в 1
иначе выводим "{:" + c и переходим в 1.
Если всё просто, можно захардкодить вручную, если сложно, то пишут штуку, которая это делает сама.