软测实验-人民币数字大写转换

具体需求如下:

1)中文大写金额数字应用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整(正)等字样。

2)中文大写金额数字到"元"为止的,在"元"之后,应写"整"(或"正")字,在"角"之后,可以不写"整"(或"正")字。

3)中文大写金额数字前应标明"人民币"字样,大写金额数字有"分"的,"分"后面不写"整"(或"正")字。

4)大写金额数字应紧接"人民币"字样填写,不得留有空白。

5)阿拉伯数字小写金额数字中有"0"时,中文大写应按照汉语语言规律、金额数字构成和防止涂改的要求进行书写。

举例如下:

1、阿拉伯数字中间有"0"时,中文大写要写"零"字,如¥1409.50,应写成:人民币壹仟肆佰零玖元伍角。

2、阿拉伯数字中间连续有几个"0"时,中文大写金额中间只写一个"零"字,如¥6007.14,应写成:人民币陆仟零柒元壹角肆分。

3、阿拉伯金额数字万位和元位是"0",或者数字中间连续有几个"0",万位、元位也是"0",但千位、角位不是"0"时,中文大写金额中只写一个零字,也可以不写"零"字。如¥1680.32,应写成:人民币壹仟陆佰捌拾元叁角贰分,又如¥107000.53,应写成:人民币壹拾万零柒仟元伍角叁分。

4、阿拉伯金额数字角位是"0",而分位不是"0"时,中文大写金额"元"后面应写"零"字。如¥16409.02,应写成人民币:壹万陆仟肆佰零玖元零贰分;又如¥325.04,应写成人民币叁佰贰拾伍元零肆分。

注:

  • 代码测试时暂时发现一下bug(不全):

    • 1. 输入0.00时输出结果不对;
  • 转载请表明出处!
#include <iostream>
#include <sstream>
#include <string>
#include <stack>
/***  " 1)中文大写金额数字应用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整(正)等字样。"" 2)中文大写金额数字到\"元\"为止的,在\"元\"之后,应写\"整\"(或\"正\")字,在\"角\"之后,可以不写\"整\"(或\"正\")字。"" 3)中文大写金额数字前应标明\"人民币\"字样,大写金额数字有\"分\"的,\"分\"后面不写\"整\"(或\"正\")字。"" 4)大写金额数字应紧接\"人民币\"字样填写,不得留有空白。"" 5)阿拉伯数字小写金额数字中有\"0\"时,中文大写应按照汉语语言规律、金额数字构成和防止涂改的要求进行书写。"** 注:*      1. 私有成员变量的命名规则:名称后加上一个下划线*      2.* */using namespace std;class Num2Uper
{
public:Num2Uper(const string &num){/*此处应该检查num的值是否合法。* 如:*      1- 小于0*      2- 小数不合法*      3- 数字本身不合法*      4- 小数点是非法字符等* *///if (num.size()-)this->setNum(num);}Num2Uper(){this->num_ = nullptr;this->word_ = nullptr;}const string &getWord() const{return word_;}void setWord(const string &word){Num2Uper::word_ = word;}const string &getNum() const{return num_;}void setNum(const string &num){Num2Uper::num_ = num;}virtual ~Num2Uper(){}private:string word_;string num_;
//    static  string touper_[10]={"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
//    static  string unit_[15] = { "万", "仟", "佰", "拾", "亿", "仟", "佰", "拾", "万", "仟", "佰", "拾","元", "角", "分"};static string digits_[10];static  string unit_1[13];static  string unit_2[2];public:void transform(){string part_int;string part_dec;int point_pos = int(this->getNum().find('.'));
//        cout<<"point_pos = "<<point_pos<<endl;if (point_pos ==-1){part_int = this->num_;}else{part_int = num_.substr(0,point_pos);part_dec = num_.substr(point_pos+1);}int part_int_size = part_int.size();
//        cout<<"part_int_size = "<<part_int_size<<endl;bool zero_flag = true; // flase表示有0bool prev_zero_flag = false; // false表示0位之前有非零数stack<string> result;for (int i = 0; i < part_int_size; ++i){
//            cout<<"i = "<<i<<endl;int tmp = int(part_int[part_int_size-i-1])- 48;if (i%4 == 0){if (tmp == 0){if (!zero_flag&&prev_zero_flag){result.push(digits_[0]);}result.push(unit_1[i]);zero_flag = false;prev_zero_flag = false;}else{//101if (!zero_flag && prev_zero_flag){result.push(digits_[0]);}result.push(unit_1[i]);result.push(digits_[tmp]);zero_flag = true;prev_zero_flag = true;}}else{if (tmp == 0){zero_flag = false;continue;}else{if (prev_zero_flag&&!zero_flag){
//                        result.push(digits_[0]);result.push(digits_[0]);}result.push(unit_1[i]);result.push(digits_[tmp]);prev_zero_flag = true;zero_flag = true;}}}string tmp;while (!result.empty()){tmp = result.top();result.pop();if (tmp=="亿" &&  result.top() == "万"){result.pop();}word_.append(tmp);
//            result.pop();}if (point_pos == -1 ){word_.append("元整");}else{word_.append("元");for (int i = 0; i < part_dec.size(); ++i){word_.append(digits_[int(part_dec[i])-48]);word_.append(unit_2[i]);}}}string num2uper(int n){if (n<0||n>9){cerr<<"Wrong Number!"<<endl;}else{return this->digits_[n];}}};string Num2Uper::digits_[10]={"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
string Num2Uper::unit_1[13] = {"", "拾", "佰", "千", "万", "拾", "佰", "千", "亿", "拾", "佰", "千","万"};
string Num2Uper::unit_2[2] = {"角", "分"};int main()
{string str;while(1){cout<<"请输入金额:";cin>>str;if (str == "-1")break;Num2Uper num = Num2Uper(str);num.transform();cout<<"人民币"<<num.getWord()<<endl;}return 0;
}

人民币数字大写转换(C++)相关推荐

  1. 人民币数字大写转换 java实现 [附源码]

    动机 业务系统开发的报表中经常需要将人民币数值转换为大写,所以江苏南大先腾java研发框架中写了一个通用的大写转换函数.由于报表的数值一般比较大所以在java开发中不建议使用float或者int类型, ...

  2. 人民币数字大小写转换

    人民币数字大写转换 include <iostream> include <iostream> include <string> include <stdli ...

  3. php数字大写,php数字大写转换的方法

    php数字大写转换的方法:1.判断$num是否存在:2.将浮点转换为整数:3.将空的变量用来保存转换字符串:4.分割数字,区分圆角分:5.循环计算亿万元等:6.输出转换结果即可. 早些年做CRM用到的 ...

  4. 真正正确的人民币 小写 大写 转换算法

    网上很多人民币数字转换成人民币大写的算法,但是,按照财务的规则,没有一个是对的. 于是我按照财务的规则重新写了一次这个逻辑 首先来看财务的大写人民币规则 (一) 阿拉伯数字中间有"0&quo ...

  5. c++字符数组整数转换中文大写金额的形式_数字大写转换烦,内置格式多缺陷, VBA函数来解难...

    观看视频更直观 在Excel中将数字转换为中文大写或小写,有两种方法,一种是设置数据格式:另一种是使用内置的隐蔽函数NumberString函数. 一.设置数据格式 在Excel中输入数字后,选中单元 ...

  6. c语言如何实现人民币转换编程,如何实现人民币的大写转换?

    dim str(9) str(0)="零" str(1)="壹" str(2)="贰" str(3)="叁" str(4 ...

  7. 人民币金额(数字)大写转换及金币单位切换

    这主要是涉及金额的转换,废话少说,就是干. 方法一(jsp): //阿拉伯数字转金额大写 function changenomey(){ var financing_amount=$("[ ...

  8. oracle 数字大写转换,oracle数据库使用游标实现大写数字转换成小写数字

    项目遇到需求,需要将大写数字转换成小写.代码如下:declare t_zl varchar2(100); t_ts varchar2(100); t_l number; hh varchar2(100 ...

  9. 数字大写转换(13位以下)

    //功能:将数字转换成大写数字(13位数字以下),例如银行的转换应用等 #include<stdio.h> #include<string.h> int main() { in ...

  10. java 数字转大写_Java实现数字大写转换

    packageday1;importjava.util.ArrayList;importjava.util.Collections;importjava.util.regex.Pattern;publ ...

最新文章

  1. CSS 外边距(margin)重叠及防止方法
  2. 谈谈yii2-gii如何自定义模板
  3. “两弹一星”元勋年轻时的考卷,连标点符号都找不到错
  4. sqlyog for MySQL远程连接的时候报错mysql 1130的解决方法
  5. Elasticsearch安装X-Pack插件
  6. 在eclipse中利用条件断点打印log
  7. 锐起无盘服务器内存盘,锐起及网众系列使用无盘+内存盘的新方法
  8. mysql 省市县三级联动查询_三级联动查询全国省市区(xml与数据库)
  9. !peb和PEB结构
  10. 用LED驱动框架注册led设备的示例代码
  11. 《 浅 谈 C T F 》
  12. 武汉大学计算机学院 夏令营,武汉大学计算机学院2020保研夏令营通知
  13. Android下的弹幕的简单实现
  14. Python编程 统计Java源文件代码行数,注释行数,空白行数
  15. 0基础编程资源大全(先收藏~慢慢看~)
  16. 【c++primer】P86--练习:读入一个包含标段符号的字符串,标点符号去除后输出
  17. 字符串中单词分别逆序
  18. HC110110019 FTP原理与配置
  19. 别再说你不会!java嵌入式开发教程
  20. 用html5label写一个简单的按钮功能

热门文章

  1. html5 mp4在线播放器,HTML5 Web播放器-Video.js
  2. 如何检索国外的博士论文
  3. 每日工作问题记录总结(好习惯 打卡2/?)
  4. 医学软件项目开发(二):医学图像的显示及相关操作
  5. JSchException: Algorithm negotiation fail
  6. 2021年9月电子学会Python等级考试试卷(四级)考题解析
  7. border-shadow
  8. Scanf函数,取地址符和字符数组的联系
  9. 目前我国每小时就有1名电动自行车骑行者死于交通事故
  10. linux卸载usb声卡,Linux alsa 声卡驱动 安装 卸载 设置默认声卡