次のような特殊文字を使用して文字列の順序を変更したい:
ZAŻÓŁĆ GĘŚLĄ JAŹŃ
に
ŃŹAJ ĄŁŚĘG ĆŁÓŻAZ
std::reverse を使用しようとしています
std::string text("ZAŻÓŁĆ GĘŚLĄ JAŹŃ!");
std::cout << text << std::endl;
std::reverse(text.rbegin(), text.rend());
std::cout << text << std::endl;
しかし、出力は次のことを示しています:
ZAŻÓŁĆ GĘŚLĄ JAŹŃ!
!\203Ź\305AJ \204\304L\232Ř\304G \206āœû\305AZ <- 逆文字列
だから私はこれを「手動で」やってみます:
std::string text1("ZAŻÓŁĆ GĘŚLĄ JAŹŃ!");
std::cout << text1 << std::endl;
int count = (int) floorf(text1.size() /2.f);
std::cout << count << " " << text1.size() << std::endl;
unsigned int maxIndex = text1.size() - 1;
for (int i = 0; i < count ; i++)
{
char tmp = text1[i];
text1[i] = text1[maxIndex];
text1[maxIndex] = tmp;
maxIndex--;
}
std::cout << text1 << std::endl;
しかし、この場合、すべての特殊文字が 2 回カウントされるため、text1.size() に問題があります。
ZAŻÓŁĆ GĘŚLĄ JAŹŃ!
13 27 <- 2 番目の数値は text1.size()
!\203Ź\305AJ \204\304L\232Ř\304G \206āœû\305AZ
特殊文字を含む文字列を逆にする適切な方法は?