Программа преобразует введённое пользователем число в текст:
widget.h
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
public slots:
void MyEventHandler1();
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QObject::connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(MyEventHandler1()));
}
Widget::~Widget()
{
delete ui;
}
//функция добавляет пробелы в число 12345678 -> 12 345 678
//---------------------------------------------------------------------------
QString fn_SpsToInt(QString str)
{
int x = str.length() - 3;
while(x > 0) {str.insert(x, QString(" ")); x -= 3;}
return str;
}
// ***********************************************************************************
// функция обрабатывает по три цифры
QString fnThreeDigitText(int xx)
{
QString edn[] = {"", "один", "два", "три", "четыре", "пять",
"шесть", "семь", "восемь", "девять", "десять",
"одиннадцать", "двенадцать", "тринадцать",
"четырнадцать", "пятнадцать", "шестнадцать",
"семнадцать", "восемнадцать", "девятнадцать"
};
QString dec[] = {"двадцать", "тридцать", "сорок", "пятьдесят",
"шестьдесят", "семьдесят", "восемьдесят", "девяносто"};
QString han[] = {"сто", "двести" ,"триста", "четыреста", "пятьсот",
"шестьсот", "семьсот", "восемьсот", "девятьсот"};
QString str;
int y = xx / 100;
if(y > 0) str = han[y-1] + " ";
xx = xx % 100;
y = xx / 10;
if(xx > 19)
{
str += dec[y-2] + " ";
xx = xx % 10;
}
str += edn[xx];
return str;
}
// ***********************************************************************************
// функция превращения числа в строку слов
QString fnOllDigitsText(qint64 xx)
{
// return если ноль
if(xx == 0) return "ноль";
int y, z, Cx = 0;
QString s1, s2, rez;
QString gig[] = {"", "тысяч", "миллион", "миллиард", "триллион"};
// собсна процесс превращения числа в строку слов
while(xx > 0)
{
if(xx % 1000)
{
y = xx % 10;
z = xx % 100;
s1 = fnThreeDigitText(xx % 1000);
s2 = gig[Cx];
// отсюда начинаются шаманские танцы с бубном
// с целью изменения склонений и спряжений
if(Cx == 1)
{
if((z < 10) || (z > 20))
{
if(y == 1) s2 += "а";
if((y > 1) && (y < 5)) s2 += "и";
if(y == 1) s1.replace(s1.length()-2, 2, "на");
if(y == 2) s1.replace(s1.length()-2, 2, "ве");
}
}
if(Cx > 1)
{
if((z > 10) && (z < 21)) s2 += "ов";
else if((y > 1) && (y < 5)) s2 += "а";
else if((y == 0) || (y > 4)) s2 += "ов";
}
// конец шаманских танцев с бубном
rez = "\n" + s1 + " " + s2 + ", " + rez;
}
Cx++;
xx = xx / 1000;
}
// удаляем лишние последние пробелы и запятые
y = rez.length(); Cx = 0;
while(y--)
{
if((rez.at(y) == ' ')||(rez.at(y) == ',')) Cx++;
else break;
}
rez.resize(rez.length() - Cx);
// удаляем непечатные символы с начала и конца строки
// и добавляем точку в конце
rez = rez.trimmed(); // + ".";
// делаем первую букву заглавной
rez[0] = rez.at(0).toUpper();
return rez;
}
// ***********************************************************************************
// обработка нажатия кнопок
void Widget::MyEventHandler1()
{
QChar s;
QString inp = ui->lineEdit->text();
if(inp == "") return;
// проверка правильности введенного числа
for(int i = 0; i < inp.length(); i++)
{
s = inp.at(i);
if(s < '0' || s > '9')
{
ui->label_1->setText("неправильное число");
return ;
}
}
ui->label_4->setText(fn_SpsToInt(inp));
ui->label_1->setText(fnOllDigitsText(inp.toLongLong()));
return;
}