Чтобы ответить, почему ваша версия не работает.
(я не вижу определения для демо - я предполагаю, что это непустая строка.)
temp определена, хотя, как пустая строка.Ваш цикл проверяет «rit», но не «it», это может быть в порядке, если 2 строки имеют одинаковую длину.
«it» пытается перебрать пустую строку, и поэтому разыменование вызывает ошибку.
Если бы temp уже была строкой с правильной длиной, то ее можно было бы успешно повторить и отредактировать.
Этого можно добиться с помощью
temp.resize(demo.length());
или просто
temp = demo;
перед циклом.