Если нет пауз между буквами, то задача однозначно не решается:
Например, "vz" и "3d" одинаково кодируются "...---.." ("...-- -.." и "...- --..").
В худшем случае, неправильная интерпретация первых символов может сделать расшифровку в самом конце невозможной.
Поэтому надо или писать полный перебор, или, что будет гораздо эффеективнее, динамическое программирование.
Поскольку это все явно гораздо выше уровня вопроса, то предполагаю, что в вашей задаче пробелы, все-таки, есть.
Тогда надо разбить строку на отдельные "слова" - группы тире и точек, разделенные пробелами и каждую группу перевести в букву по таблице. Таблицу в идеале надо хранить в trie ("бор" по русски), но эта структура не реализована в стандартной библиотеке C++, поэтому можно воспользоваться просто std::map<std::string, char>
Edit: Разумеется, таблица для обратного перевода должна быть отдельной переменной. Не получится смешать в одну кучу переводы и туда и обратно.