【要求】编写程序,读取支票的一个数值金额,输出其中文大写格式。读取一种日期格式:08/27/13,输出第二种日期格式:2013年08月27日。程序总的金额范围:0~10000的数值, 接受2位小数。
【运行例子】
请输入金额:817.24
请输入日期:08/27/13
输出金额:¥捌佰壹拾柒元贰角肆分
输入日期:2013年08月27日
【提示】
1)可以将大写字放到一个字符串数组里,例如:
string str1[] = {"分","角","元","拾","佰","仟","万"}; //或者char str1[][3]=…
string str2[] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
2)将输入数字num*100,再转化使用itoa函数将数值转化为字符串,即字符串中保存的是“81724”。
char *itoa( int value, char *string,int radix);
原型说明:
value:欲转换的数据。
string:目标字符串的地址。
radix:转换后的进制数,可以是10进制、16进制等。
例如: 以下代码将数值12345转化为字符串“12345”存储于字符数组str中。
int number = 12345;
char str[32];
itoa(number, str, 10);
3)编写一个函数,用于转换日期格式
void Convert(char date1[], char date2[]);
//将格式1的日期date1转成格式2的日期date2
或者void Convert(string str1, string &str2);
#pragma warning(disable:4786)
#include <string>
#include <stdio.h>
#include <iostream>
#include <vector>
using std::vector;
using std::string;
using std::cout;
using std::cin;
using std::endl;
string ConvertMoney(double dNum)
{
string strResult;//要返回的字符串
char c_Digit[20];//c风格的字符数组
string strDigit;//输入的数字字符串
int iLength = 0;//输入的双精度数的长度
int iAddZero = 0;//加零标志
int iDigit = 0;//取出的数字
string str1[] = {"分","角","元","拾","佰","仟","万",
"拾","佰","仟","亿","拾","佰","仟","万","拾","佰","仟"};
string str2[] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
vector<string> strUnit(str1,str1 + 18);//初始化向量
vector<string> strUpperNum(str2,str2 + 10);
sprintf(c_Digit,"%.0f",dNum*100);//将数字串换成c风格的数组
strDigit = c_Digit;//将字符数组的内容赋值给string变量
iLength = strDigit.length();//取得字符串的长度
if (iLength > 15 || iLength < 0)//如果输入的数字超出double类型数据的长度的话返回“error“
return "Error";
for (int i = 0; i < iLength; i++) {//将字符串逐位处理
iDigit = atoi(strDigit.substr(i,1).c_str());
if (iDigit == 0)//如果当前位为零,则将加零标志+1
iAddZero++;
else {
if (iAddZero > 0)//如果当前为不为0,且加0标志大于0
strResult += "零";//则在字符串中加入“零“
strResult += strUpperNum[iDigit];
iAddZero = 0;
}
//该位不为0||元位||亿位||万位
if ((iDigit != 0) || (iLength - i == 3) || (iLength - i == 11)||((iLength - i + 1)%8 == 0 && (iAddZero < 4)))
strResult += strUnit[iLength - i - 1];
}
if (strDigit.substr(strDigit.length() - 2,2) == "00")
strResult += "整";
return strResult;
}
int main()
{
double dLowerRMB = 0.0;
cout << "请输入要转换的人民币金额!" << endl;
cin >> dLowerRMB;
cout << "-------------------------------------------------" << endl;
cout << "您要转换的人民币小写金额为 " << "\n" << dLowerRMB << endl;
cout << "-------------------------------------------------" << endl;
string strUpperRMB = ConvertMoney(dLowerRMB);
cout << "大写金额为" << "\n" << strUpperRMB << endl;
cout << "-------------------------------------------------" << endl;
return 0;
}