我想要改变带有特殊字符的字符串的顺序,就像这样:
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
如何正确地反转带有特殊字符的字符串?
std::reverse
时不需要使用反向迭代器。(虽然这不会改变结果,但了解这一点也是好的) - R. Martinho Fernandes\304
看起来很像U+0304
,这是一个分解的变音符号。 - MSalters