Тема: «Работа со строками»

Пример 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); // выводим результат

}



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: