Нужно поменять местами последний и предпоследний символы QString
. Решил делать через std::swap()
:
unsigned recursive_damerau(const QString &s1, const QString &s2)
{
if (s1 == "")
return s2.length();
if (s2 == "")
return s1.length();
const char adder = (s1.back() == s2.back());
unsigned s1_length = s1.length();
unsigned min_dist;
QString s1_short = s1, s2_short = s2;
s1_short.chop(1);
s2_short.chop(1);
min_dist = min(min(recursive_damerau(s1, s2_short) + 1, recursive_damerau(s1_short, s2) + 1), recursive_damerau(s1_short, s2_short) + adder);
if (s1_length != 1) // As it is also not zero, that means >=2
{
QString s1_swapped = s1;
std::swap(s1_swapped[s1_length - 1], s1_swapped[s1_length - 2]);
min_dist = min(min_dist, recursive_damerau(s1_swapped, s2));
}
return min_dist;
}
Получаю ошибки:
Насколько я понимаю, это потому что QString::operator[]
возвращает QCharRef
вместо QChar&
, который в данном случае неправильно обрабатывается.
Есть ли способ это исправить?
Как вариант
QString str("Hello world");
str.insert(str.size()-2,str[str.size()-1]).chop(1);
Если через стандартную библиотеку, то можно использовать iter_swap
:
std::iter_swap(std::end(str)-1, std::end(str)-2);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Пишет Предупреждение C26495 Variable 'Mat::temp' is uninitializedAlways initialize a member variable (type