找错》》》人民币大小写转换C实现

verybigmouthz 2002-04-11 01:21:48

//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
/*人民币大小写转换的实现*/
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "string.h"
#include "iostream.h"
/**********************************************/
/*123689005 为 壹万贰仟叁佰陆拾捌万玖仟零伍元*/
/*1000000 为 壹仟万元 */
/*100101 为 壹拾万壹佰零壹元 */
/**********************************************/
char bit_first_money[31];/*元以前位字符变换位*/
int first_width; /*元以前字符串长*/
int check_bit(int k);
int check_wan(int j);
int main(int argc,char *argv[])
{ char * bit_max[]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
char * bit_bit[]={"分","角","元","拾","佰","仟","万","拾","佰","仟",
"亿","拾","佰","仟","万","拾","佰","仟","兆","拾",
"佰","仟","万","拾","佰","仟","亿","拾","佰","仟",
"万","拾","佰","仟","兆"};

char bit_last_money[10]; /*角分数值*/
char out_money[30][2][2]; /*输出字符*/
int last_width=2; /*角分位字符串长*/
int m,n; /*temp*/
cout << "Please input first money:";
scanf("%s",bit_first_money);
cout << "Please input last money:";
scanf("%s",bit_last_money);
first_width=strlen(bit_first_money);
cout << "first_money" << bit_first_money << " first_width"<< first_width;
cout << "last_money" << bit_last_money << " last_width "<< last_width;
cout << "\n";
int i=0; /*记载当前first_money的字符串操作位*/
int j=first_width + last_width -1;/*记载当前所对应位的bit_bit串操作位*/
int k=0; /*记录当前out_money的字符串操作位*/

/*搜索字符串的顺序为从头至尾*/
for(;i<first_width;++k,--j,++i)
{/*如果bit_first_money所对应的位为一非0字符时,
直接翻译出相应的位数符bit_max,位标记bit_bit*/
if (bit_first_money[i]!='0')
{m=(int)bit_first_money[i] - 48;
strcpy(out_money[k][0],bit_max[m]);
strcpy(out_money[k][1],bit_bit[j]);
}/*如果bit_first_money所对应的位为0字符时,则进行...*/
else /*先判断该位是否是"元万亿兆"如果是则记下该位
标记bit_bit,位数符bit_max置为" "*/
if (check_bit(j))
{strcpy(out_money[k][0]," ");
strcpy(out_money[k][1],bit_bit[j]);
}/*若该位不是"元万亿兆,则进行..."*/
else /*判断下一位是不是空位*/
if ( bit_first_money[i +1]!='0')
/*如果不是则记下该位数符bit_max为"零",位标记bit_bit" "*/
{strcpy(out_money[k][0],"零");
strcpy(out_money[k][1]," ");
}/*如果下一位是空位,则进行...*/
else
while (1)
{ /*如果下一位不是空位,则进行退出循环*/
if (bit_first_money[i+1]!='0')
/*同时步减--i,++j,--k将本次处理交由for循环体处理
步减原因在于for循环体获得处理后,其步进了++i,--j,++k*/
{--i; ++j; --k; break; }
else /*如果下一位是空位,则进行...*/
{/*检查下一位是不是""元万亿兆"*/
if (check_bit(j -1))
/*如果是则记下本位标记bit_bit及位数符bit_max为" "
该下一位标记bit_bit,位数符bit_max置为" "
同时步进i++,j--,k++,跳出循环while*/
{strcpy(out_money[k][0]," ");
strcpy(out_money[k][1]," ");
strcpy(out_money[k+1][0]," ");
/*如************果*/
if (check_wan(j -1))
strcpy(out_money[k+1][1]," ");
else strcpy(out_money[k+1][1],bit_bit[j-1]);
i++; j--; k++;
break;
}/*如果不是则记下本位标记bit_bit为" "位数符bit_max为" "*/
else /*同时步进++i,--j,++k,继续下面运行*/
{strcpy(out_money[k][0]," ");//******
strcpy(out_money[k][1]," ");
++i; --j; ++k;
}
/*如果本位不等于'0'则跳出本次循环
如果本位等于'0',则再次循环*/
if (bit_first_money[i]!='0')
{m=(int)bit_first_money[i] - 48;
strcpy(out_money[k][0],bit_max[m]);
strcpy(out_money[k][1],bit_bit[j]);
break;
}//else { ; }
}
}//while
}//for

char last_max_money[2][2][2];
n=0;
if (bit_last_money[0]!='0')
{ m=(int)bit_last_money[0] - 48;
strcpy(last_max_money[0][0],bit_max[m]);
strcpy(last_max_money[0][1],bit_bit[1]);
if (bit_last_money[1]!='0')
{m=(int)bit_last_money[1] - 48;
strcpy(last_max_money[1][0],bit_max[m]);
strcpy(last_max_money[1][1],bit_bit[0]);
}
}
else
if (bit_last_money[1]!='0')
{m=(int)bit_last_money[1] - 48;
strcpy(last_max_money[0][0],"零");
strcpy(last_max_money[0][1],bit_max[m]);
strcpy(last_max_money[1][0],bit_bit[0]);
}
else
{strcpy(last_max_money[0][0],"整");
}

cout << "\nmin to maxof china:\n";
printf("%s%s\n",out_money,last_max_money);
return 0;
}
//---------------------------------------------------------------------------
/*搜寻该闰是否对应于"元、万、亿、万、兆"*/
int check_bit(int k)
{int p=2;
while(p<k) p+=4;
if (p==k) return(p); else return(0);
}
int check_wan(int j)
{ int m=j,n;
switch (j)
{ case 6: //万
{n=j+3;
for(;m<=n;++m)
{if (bit_first_money[m]!='0') return 0;}
return 1;
}
case 10: //亿
{n=j+23;
for(;m<=n;++m)
{if (bit_first_money[m]!='0') return 0;}
return(1);
}
case 14: //兆
{n=j+3;
for(;m<=n;++m)
{if (bit_first_money[m]!='0') return 0;}
return(1);
}
case 18: //万
{n=j+11;
for(;m<=n;++m)
{ if (bit_first_money[m]!='0') return 0;}
return(1);
}
case 22: //亿
{n=j+7;
for(;m<=n;++m)
{ if (bit_first_money[m]!='0') return 0;}
return(1);
}
case 26: //万
{n=j+3;
for(;m<=n;++m)
{ if (bit_first_money[m]!='0') return 0;}
return(1);
}
case 30: //兆
{n=j+3;
for(m=j;m<=n;++m)
{ if (bit_first_money[m]!='0') return 0;}
return(1);
}
default :
return 0;
}
}
//关于程序入口和及程序输出处有待改进
//出现100000000时出现非正确转换(同样10000000000000000, 10000000000) 一样
//编译环境bcb
...全文
97 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

69,377

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧