我想用这样的特殊字符更改字符串中的顺序:
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;
但在这种情况下,我在 text1.size() 中遇到了问题,因为每个特殊字符都被计算了两次:
ZAŻÓŁĆ GĘŚLĄ JAŃ!
13 27 <- 第二个数字是 text1.size()
!\203Ź\305AJ \204\304L\232Ř\304G \206āœû\305AZ
如何用特殊字符反转字符串的正确方法?