Ваш код очень многословен и перечисляет каждую операцию, такую как выбор длины строки или присвоение указателя на конец строки, или использование вспомогательной переменной для обмена значениями.
Есть много способов сделать его более эффективным (как доказывают другие ответы), но, возможно, более правильно. Ваше решение ставит ясность кода выше производительности, и это достойная похвалы привычка.
Конечно, код может быть написан вдвое меньше инструкций, но оптимизирующий компилятор будет выполнять почти ту же работу с вашим кодом (можно было бы пролить пару циклов при некотором умном кодировании), но ваш просто более читабелен.
Конечно, если вам действительно нужно какое-то экстремальное повышение производительности (но на более длинных строках, может быть, мегабайты данных), это идеальная работа для GPU. Для настройки операции потребуется в 50 раз больше времени, чем для выполнения операции - небольшая доля текущего процессорного времени.