Russian Qt Forum

Программирование => С/C++ => Тема начата: gil9red от Май 08, 2012, 20:39



Название: [РЕШЕНО] Негативная конверктация регистра символа
Отправлено: gil9red от Май 08, 2012, 20:39
Здравствуйте! =)
Решил написать конвертор регистра символов.
Идея проста: окно, на нем два виджета TextEdit(окно ввода (1) и окно вывода (2)) и
три кнопки QPushButton
Первая кнопка переводит текст в верхний регистр: был: "машина - CAR", стал: "МАШИНА - CAR",
Вторая кнопка переводит текст в нижний регистр
А третья переводит негативно - в зависимости от регистра символа:
был: "Hello World!", стал: "hELLO wORLD!"

для первой и второй кнопки не нужно было придумывать алгоритм - Qt уже об этом позаботился
для третьей я придумал такой код:
Код:
QString makeConvertNegative(QString InputString)
{
    QString temp = InputString;
    for(int i = 0; i < temp.size(); i++)
    {
        if(temp.at(i).isLower())
        {
            temp.replace(temp.at(i), temp.at(i).toUpper(), Qt::CaseSensitive);
        }else
        {
            temp.replace(temp.at(i), temp.at(i).toLower(), Qt::CaseSensitive);
        }
    }
    return temp;
}

Этот алгоритм работает просто:
проверяем регистр каждого символа строки и вставляем на его место символ с противоположным регистром

Но! Этот алгоритм не все регистры символов переводит негативно, точнее если вводить по одному символу и конверктировать, то работает.

Помогите понять в чем ошибка, и "ткнуть пальцем" на нее  ;D


Название: Re: Негативная конверктация регистра символа
Отправлено: Alex Custov от Май 08, 2012, 20:53
Этот алгоритм работает просто:
проверяем регистр каждого символа строки и вставляем на его место символ с противоположным регистром

метод replace(), использованный тобой, заменяет все вхождения одного символа на другой, а не конкретный символ по индексу i. Поэтому некоторые символы меняются по несколько раз. Используй

Цитировать
QString & QString::replace ( int position, int n, QChar after )


Название: Re: Негативная конверктация регистра символа
Отправлено: Igors от Май 08, 2012, 20:55
Код
C++ (Qt)
QString makeConvertNegative(QString s)
{
   for (int i = 0; i < s.size(); i++)
       s[i] = s[i].isLower() ? s[i].toUpper() : s[i].toLower();
 
   return s;
}


Название: Re: Негативная конверктация регистра символа
Отправлено: gil9red от Май 08, 2012, 21:06
Alex Custov, спасибо, вы абсолютно правы =)
Igors, спасибо за рабочий вариант =) и без replace() можно обойтись))