Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6194
  • 博文数量: 4
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 40
  • 用 户 组: 普通用户
  • 注册时间: 2015-06-01 14:12
文章分类

全部博文(4)

文章存档

2015年(4)

我的朋友
最近访客

分类: C/C++

2015-06-03 21:16:36

QT界面写的so easy!
剩下的时间都用来实现逻辑了。要是当初我会qt,也不至于花了两个月的时间来写激光器控制程序了,我操!当时好像还写的是多线程的勒!话不多说,来看看鬼畜的中文大写:
整数 /*个十百千万亿兆京垓秭穰沟涧正载极归僧那思猴格*/
小数 /*分厘毫丝忽微纤沙尘埃渺漠“模糊”“梭巡”“须臾”“瞬息”“弹指”“刹那”“六德”“虚空”“清净”“俺来也”“阿摩罗”“涅槃寂静”*/
 
之前这个翻译程序在nyoj上写过一个C语言版本的,今天又写了一遍,发现有两处数组越界访问了,在QT的版本改过来了。
关键点主要在多余的0如何在中文大写中消除,中文遵循只读出最后一个零。如果发现结束了还是零那么什么都不用输出了!
 

点击(此处)折叠或打开

  1. const QString MainWindow::coreTranslateInteger(const QString &arabiaintegernumber)
  2. {
  3.     QStringList cnintegetelement;
  4.     cnintegetelement<<"个"<<"万"<<"亿"<<"兆"<<"京"<<"垓"<<"秭"<<"穰"<<"沟"<<"涧"<<"正"<<"载"<<"极"<<"归"<<\
  5.                       "僧"<<"那"<<"思"<<"猴"<<"格"; /*最大76位数,即千格*/
  6.     QStringList cnmultipleelement;
  7.     cnmultipleelement<<"拾"<<"佰"<<"仟";
  8.     QStringList cnnumber;
  9.     cnnumber<<"零"<<"壹"<<"贰"<<"叁"<<"肆"<<"伍"<<"陆"<<"柒"<<"捌"<<"玖";
  10.     QString cnintegerpart="";
  11.     /*Integer part Translation*/
  12.     int len=arabiaintegernumber.length();
  13.     int i=0;
  14.     while(i<len-1) { //之前写的是i
  15.         if(arabiaintegernumber[i]=='0' && arabiaintegernumber[i+1]!='0') {cnintegerpart+="零";}
  16.         else if(arabiaintegernumber[i]!='0') {cnintegerpart+=cnnumber[arabiaintegernumber[i].toLatin1()-'0'];}
  17.         else {;}
  18.         if((len-1-i)%4==1 && arabiaintegernumber[i]!='0') {cnintegerpart+="拾";}
  19.         else if((len-1-i)%4==2 && arabiaintegernumber[i]!='0') {cnintegerpart+="佰";}
  20.         else if((len-1-i)%4==3 && arabiaintegernumber[i]!='0') {cnintegerpart+="仟";}
  21.         else {;}
  22.         if((len-1-i)%4==0 && i>=3 && arabiaintegernumber[i]!='0' && arabiaintegernumber[i-1]!='0'\
  23.                 && arabiaintegernumber[i-2]!='0' && arabiaintegernumber[i-3]!='0') { //之前没有判断i>=3就直接执行了i-3
  24.             cnintegerpart+=cnintegetelement[(len-1-i)/4];
  25.         }
  26.         else if((len-1-i)%4==0 && i<3) {
  27.             cnintegerpart+=cnintegetelement[(len-1-i)/4];
  28.         }
  29.         else {
  30.             ;
  31.         }
  32.         i++;
  33.     }
  34.     /*输出最后一个字符,以防止上一个循环中的i+1溢出和针对只有一个数字的情况(这时零还是要打印的)*/
  35.     if(arabiaintegernumber[i]!='0' && len>=1) {
  36.         cnintegerpart+=cnnumber[arabiaintegernumber[i].toLatin1()-'0'];
  37.     }
  38.     else if(arabiaintegernumber[i]=='0' && len==1) {
  39.         cnintegerpart+="零";
  40.     }
  41.     else {
  42.         ;
  43.     }
  44.     return cnintegerpart;
  45. }
阅读(1786) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~