std::stringってバイト単位で扱うものでしょ
本当に文字単位で扱いたいならstd::wstring