Russian Qt Forum
Ноябрь 23, 2024, 20:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Негативная конверктация регистра символа  (Прочитано 3428 раз)
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« : Май 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;
}

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

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

Помогите понять в чем ошибка, и "ткнуть пальцем" на нее  Смеющийся
« Последнее редактирование: Август 13, 2012, 11:26 от gil9red » Записан

Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #1 : Май 08, 2012, 20:53 »

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

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

Цитировать
QString & QString::replace ( int position, int n, QChar after )
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Май 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;
}
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Май 08, 2012, 21:06 »

Alex Custov, спасибо, вы абсолютно правы =)
Igors, спасибо за рабочий вариант =) и без replace() можно обойтись))
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.069 секунд. Запросов: 22.