正整数转成汉字读音(QT)

来源:互联网 发布:linux查看gpu使用率 编辑:程序博客网 时间:2024/04/27 17:26
#include <QCoreApplication>#include <QDebug>#include <QString>QString num2Voice(int num){    QString src = QString("%1").arg(num);    if (src.at(0) == "-")    {        qDebug()<<"input num too big or less than 0";        return "";    }    QString slist(QStringLiteral("十百千"));    QString blist(QStringLiteral("万亿"));    QString number(QStringLiteral("零一二三四五六七八九"));    QString dest="";        //数字的读法    if (src.length() == 1)          //只有一位直接读    {        dest = QString("%1").arg(number.at(num)) + dest;        return dest;    }    for (int i=0; i<src.length(); ++i)    {        int tempIndex = i%4;        //万亿相隔四位,四位一个循环        int curReadNum = num % 10;  //当前读取的数字        if (tempIndex!=0)        {            if (curReadNum != 0)    //当前数字不是0,则读入数字加上后面的单位            {                dest = QString("%1%2").arg(number.at(curReadNum)).arg(slist.at(tempIndex-1)) + dest;            }            else                    //当前读入的是0            {                //将0读成“零”,排除连续两个“零”的读法,连续两个零读成一个,排除“零万”、“零亿”的读法                if ((dest.length() != 0) &&                        dest.at(0) != number.at(0) &&                        dest.at(0) != blist.at(0) &&                        dest.at(0) != blist.at(1))                {                    dest = QString("%1").arg(number.at(curReadNum)) + dest;                }            }        }        else        //当前读的数是个位,或者万位,或者亿位        {            if (i == 0)         //读个位            {                if (curReadNum != 0)        //个位如果是0,不需要读,不是0才需要读                {                    dest = QString("%1").arg(number.at(curReadNum)) + dest;                }            }            else            {                if (dest.length()!=0 )                {                    //排除单位前没有数字的情况,如当前只有一个“万”,读入亿位时就不需要这个“万”了,否则“一亿”会读成“一亿万”                    if(blist.contains(QString("%1").arg(dest.at(0))))                    {                        dest.remove(0,1);                    }                }                if (curReadNum != 0)        //当前读入的不是0                {                    //增加单位“万”或者“亿”                    dest = QString("%1%2").arg(number.at(curReadNum)).arg(blist.at( i/4 - 1)) + dest;                }                else        //当前读入的是0,只增加单位“万”或“亿”,避免“零万”、“零亿”的读法                {                    dest = QString("%1").arg(blist.at( i/4 - 1)) + dest;                }            }        }        num = num / 10;    }    //一十开头时,按照习惯,去掉一。如11读成“十一”而不是“一十一”    if (dest.at(0) == number.at(1) && dest.at(1) == slist.at(0))    {        dest.remove(0,1);    }    return dest;}int main(int argc, char *argv[]){    QCoreApplication a(argc, argv);
    qDebug()<<num2Voice(123456);
return a.exec();}


                                             
0 0