正整数转成汉字读音(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