Поскольку i
начинается с 0, вы получите доступ к s1[s1.size()-0]
, который вернет нулевой символ.Обратите внимание, что решения, предлагающие использовать s1.size() - i - 1
, являются неправильными , так как вы выполняете итерацию вплоть до s1.size()
, что означает, что вы в какой-то момент получите доступ к s1[-1]
.Это намного хуже, чем доступ к s1[s1.size()]
, так как поведение не определено.Начните итерацию с 1, и затем вы можете оставить оставшуюся часть кода без изменений (но, пожалуйста, сделайте отступ!).
Как уже упоминали другие, определение s2
как std::string s2(s1.rbegin(), s1.rend());
еще яснее.