Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laboratornyy_praktikum_po_programmirovaniyu_v_s...doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
1.4 Mб
Скачать

Лабораторная работа № 4 Тема: «Работа со строками» п ример 1: программа, которая переводит число из 16-ой системы в 10-ую. При вводе выполняется проверка вводимых символов.

Спроектируйте окно как показано на рисунке.

Добавьте слот для кнопки «Перевести» и напишите код, показанный ниже.

#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    adjustSize(); // делаем размеры окна минимально-необходимыми
   QRegExp regExp("[A-Fa-f0-9]{,10}"); 
// задаем набор допустимых символов и их максимальное количество
   QRegExpValidator* valid = new QRegExpValidator(regExp, this); 
// создаем указатель на объект валидатор для проверки вводимых символов 
   ui->lineEdit->setValidator(valid); 
// устанавливаем для первого окна валидатор
 }
Dialog::~Dialog()
{
    delete ui;
}
void Dialog::on_pushButton_clicked()
{
  int dec = 0; // десятичное значение
  QString str = ui->lineEdit->text(); // прочитали 16-ое число
  str = str.toUpper(); // сделали все буквы прописными
  for (int i=0; i<str.length(); ++i) // проходим по 16-му числу
  {
      char ch = str[i].toAscii(); 
// выполняем преобразование кода каждой цифры в код ASCII
      int k = 0; // число, соответствующее 16-ой цифре
      if (ch <= '9') // если десятичная цифра
        k = ch -'0'; // вычитаем код нуля
      else k = ch - 'A' + 10; 
// если буква, вычитаем код буквы 'A' и добавляем 10
      dec = dec*16 + k; // вычислем значение 10-го числа по схеме Горнера
  }
  ui->lineEdit_2->setText(QString::number(dec)); // выводим 10-ое число 
   ui->lineEdit->setSelection(0, 10); 
// выделяем содержимое окна для ввода 
}

Пример 2: программа, которая считывает строку символов, состо­ящую из русских букв, запятых и пробелов и выводит на экран мно­жество символов этой строки.

Спроектируйте окно как показано на рисунке.


#include"dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
QRegExp reg(trUtf8("[а-яА-Я, ]+")); 
// регулярное выражение, описывающее набор допустимых символов
QRegExpValidator* valid = new QRegExpValidator(reg, this); 
// объявляем указатель на объект валидатор, использующий регулярное выражение 
ui->lineEdit->setValidator(valid); /* устанавливаем валидатор для элемента lineEdit, предназначенного для ввода исходных данных */
connect(ui->lineEdit, SIGNAL(textChanged(QString)),
this, SLOT(SetofSymbols(QString))); /* соединяем сигнал об изменении содержимого строки со слотом, который будет вызываться в ответ на это изменение */ }

Добавьте в файл dialog.h объявление слота:

public slots:
    void SetofSymbols(QString);

Добавьте в файл dialog.cpp определение слота:

 // Обратите внимание на то, что исходная строка автоматически передается слоту:
void Dialog::SetofSymbols(QString str)
{
    QList<QChar> rez; // список символов для создания множества
    for (int i = 0; i<str.length(); ++i) 
// перебираем все символы исходной строки
        if (!rez.contains(str[i])) 
// если символ не содержится во множестве
            rez << str[i];  // добавляем его в список
    qSort(rez); // сортируем список
    
QString strRez; // строка для вывода
    foreach(QChar ch, rez) // каждый символ списка добавляем в строку
        strRez += ch;  
    ui->lineEdit_2->setText(strRez); // выводим результат
}