Не два, а 1 + количество слов. Не обращай внимания. Условия задачи изначально тупые, очевидно что цикл при переброске слова не считается, т.к. его «не видно».
Нормальные люди спросили бы, как бы ты решал задачу по реверсу слов, какие есть варианты, какие у этих вариантов плюсы и минусы.
вообще за один цикл сделать можно. пусть на можно делать несколько циклов последовательно. сперва надо собрать в первом цикле указатели или итераторы на начала и концы слов парами. в например вектор. во втором цикле заполним новую строку.
а как эти два цикла сделать одним? а сделать переменную cyclenumber и один бесконечный цикл в котором стоит проверка чему равно cyclenumber. если 0 то рубим первый цикл, вместо выхода из него инкрементируем cyclenumber. если 1 рубим второй цикл.
Если забыть о memcpy-оптимизациях, а просто алгоритмически смотреть на задачу,
Чисто алгоритмически мой вариант O(n). Это если не приводить требования к виду результата (напр. то, что он должен быть std::string), иными словами std::list<char> можно вполне себе распечатать на stdout без использования std::string.
Да, верно, если сделать допущение, что результат не важен.
ЗЫ. Когда я гонял подобные задачки, насколько помню обычно требовалась in-place модификация. Но, какие есть условия и ограничения у ТС, мы можем только догадываться :)
не увидел варианта «настоящего» O(n), только что-то вроде O(2n).
Вообще-то О означает, что время вычисления будет расти не быстрее чем функция в скобках. 2n и n абсолютно одинаковы в этом смысле, т.е. если увеличить размер в 10 раз, время вычислений увеличится тоже в 10 раз, хоть O(2n), хоть O(1000n) - это одно и тоже.
какие есть условия и ограничения у ТС, мы можем только догадываться
Ограничение только одно - код должен до точки совпадать с тем, что в голове у того, кто задал эту задачку. Других ответов на задачи, оторванные от реальности, просто нет.
Как промежуточный вариант кмк вполне на O(n) тянет.
Ну так то тут все варианты тянут, если не считать реализацию результата (сборка строки, распечатка и т.д.). Я ж говорю, задача оторвана от реальности, зачем нужен результат не знает даже сам автор. Поэтому и не понятно, нужно ли собирать строку, или просто распечатать, а может список слов потянет сам как результат. Тупняк, а не задача.
С таким же успехом можно и без цикла сделать - просто вызвав твою портянку из другой функции. Все циклы из блока пропадут, а значит всё норм, только весь смысл теряется.
Ну и эксплуатация не си-строки. С таким условием требуется только определить длину строки, которая получается strchr(), а далее просто копировать в конец, либо с конца.
Но крестовики такие крестовики - ничего кроме тормозящего дерьма родить не могут. Ну бывает - ты не расстраивайся.