设为首页 加入收藏

TOP

编程实现英文数字到中文大写数字的转换
2015-07-24 06:38:43 来源: 作者: 【 】 浏览:57
Tags:编程 实现 英文 数字 中文 大写 转换
本程序实现英文数字到中文大写数字的转换。
主要思想是利用该语法自底向上地构造出1――>999999999999;
然后将数字转换成中文大写。
利用flex进行词法分析,bison进行句法分析。


语法如下:
e1-->one|two|three|four|five|six|seven|eight|nine
e2-->ten|eleven|twelve|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen
e3-->twenty|thirty|forty|fifty|sixty|seventy|eighty|ninety

e4-->e3-e1
|e3
|e2
|e1

e51-->e1 hundred and e4
|e1 hundred
e52-->e51
|e4

e61-->e52 thousand e51
|e52 thousand and e4
|e52 thousand
e62-->e61
|e52

e71-->e52 million e61
|e52 million e51
|e52 million and e4
|e52 million
e72-->e71
|e62

e81-->e52 billion e71
|e52 billion e61
|e52 billion e51
|e52 billion and e4
|e52 billion
e82-->e81
|e72
|zero


lex.l文件如下:

%%
zero     {yylval=0;return ZERO;}
one      {yylval=1;return NUM1;}
two      {yylval=2;return NUM1;}
three    {yylval=3;return NUM1;}
four     {yylval=4;return NUM1;}
five     {yylval=5;return NUM1;}
six      {yylval=6;return NUM1;}
seven    {yylval=7;return NUM1;}
eight    {yylval=8;return NUM1;}
nine     {yylval=9;return NUM1;}
ten    	 {yylval=10;return NUM2;}
eleven 	 {yylval=11;return NUM2;}
twelve 	 {yylval=12;return NUM2;}
thirteen {yylval=13;return NUM2;}
fourteen {yylval=14;return NUM2;}
fifteen	 {yylval=15;return NUM2;}
sixteen	 {yylval=16;return NUM2;}
seventeen {yylval=17;return NUM2;}
eighteen {yylval=18;return NUM2;}
nineteen {yylval=19;return NUM2;}
twenty   {yylval=20;return NUM3;}
thirty   {yylval=30;return NUM3;}
forty    {yylval=40;return NUM3;}
fifty    {yylval=50;return NUM3;}
sixty    {yylval=60;return NUM3;}
seventy  {yylval=70;return NUM3;}
eighty   {yylval=80;return NUM3;}
ninety   {yylval=90;return NUM3;}
hundred  {return HUNDRED;}
thousand {return THOUSAND;}
million  {return MILLION;}
billion  {return BILLION;}
and      {return AND;}
[ \t]+   /* skip blanks */
.|\n     { return yytext[0];}




parser.y文件如下:

%{
#include
  
   
#include 
   
     #include 
    
      using namespace std; void yyerror(string msg); string trans(int term); void dtos(long term,string &result); int yylex(); #define YYSTYPE long %} %token NUM1 %token NUM2 %token NUM3 %token ZERO %token HUNDRED %token THOUSAND %token MILLION %token BILLION %token AND %% lines : lines e82 '\n' {string result;dtos($2,result);cout<
     
      

程序的运行:
flex lex.l
bison parser.y
g++ parser.tab.c -ly -ll
./a.out
输入英文数字回车得到对应的中文大写。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU1466 计算直线的交点数 [DP]+[.. 下一篇[leetcode]Wildcard Matching

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: