输入0到999是吧
大于等于100的情况(三位数)
大于等于10的情况(两位数)
剩下的情况是(一位数)
用%运算符,吧每一位数取出来
// caimi2.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <string>
void ClearBuf(char cBufftemp[500])
{
memset(cBufftemp,'\0',500);
}
void Add_Space_ToEnd(char cBufftemp[500])
{
int len = strlen(cBufftemp);
memset(cBufftemp + len, ' ', 1);
}
void Add_teen_ToEnd(char cBufftemp[500])
{
int len = strlen(cBufftemp);
memcpy(cBufftemp + len, "teen", sizeof("teen"));
}
void Add_ty_ToEnd(char cBufftemp[500])
{
int len = strlen(cBufftemp);
memcpy(cBufftemp + len, "ty", sizeof("ty"));
}
void Add_lian_ToEnd(char cBufftemp[500])
{
int len = strlen(cBufftemp);
memset(cBufftemp + len, '-', 1);
}
void ComBine_ToEnd(char cBufftemp1[500], char cBufftemp2[500])
{
int len1 = strlen(cBufftemp1);
int len2 = strlen(cBufftemp2);
memcpy(cBufftemp1 + len1, cBufftemp2, strlen(cBufftemp2));
}
void Add_hundred_ToEnd(char cBufftemp[500])
{
int len = strlen(cBufftemp);
memcpy(cBufftemp + len, "hundred", sizeof("hundred"));
}
void Add_space_and_space_ToEnd(char cBufftemp[500])
{
int len = strlen(cBufftemp);
memcpy(cBufftemp + len, " and ", sizeof(" and "));
}
// 十位时 变形前缀
void ShiWeiPrifix(int iShu, char cBufftemp[500])
{
ClearBuf(cBufftemp);
switch (iShu)
{
case 2:
memcpy(cBufftemp, "twen", sizeof("twen"));
break;
case 3:
memcpy(cBufftemp, "thir", sizeof("thir"));
break;
case 4:
memcpy(cBufftemp, "for", sizeof("for"));
break;
case 5:
memcpy(cBufftemp, "fif", sizeof("fif"));
break;
case 6:
memcpy(cBufftemp, "six", sizeof("six"));
break;
case 7:
memcpy(cBufftemp, "seven", sizeof("seven"));
break;
case 8:
memcpy(cBufftemp, "eigh", sizeof("eigh"));
break;
case 9:
memcpy(cBufftemp, "nine", sizeof("nine"));
break;
default:
break;
}
}
void GeWeiRead(int iShu, char cBufftemp[500])
{
ClearBuf(cBufftemp);
switch (iShu)
{
case 0:
memcpy(cBufftemp, "zero", sizeof("zero"));
break;
case 1:
memcpy(cBufftemp, "one", sizeof("one"));
break;
case 2:
memcpy(cBufftemp, "two", sizeof("two"));
break;
case 3:
memcpy(cBufftemp, "three", sizeof("three"));
break;
case 4:
memcpy(cBufftemp, "four", sizeof("four"));
break;
case 5:
memcpy(cBufftemp, "five", sizeof("five"));
break;
case 6:
memcpy(cBufftemp, "six", sizeof("six"));
break;
case 7:
memcpy(cBufftemp, "seven", sizeof("seven"));
break;
case 8:
memcpy(cBufftemp, "eight", sizeof("eight"));
break;
case 9:
memcpy(cBufftemp, "nine", sizeof("nine"));
break;
default:
break;
}
}
void ShiWeiRead(int iShu, char cBufftemp[500])
{
ClearBuf(cBufftemp);
if (iShu >= 10 && iShu<=12)
{
switch (iShu)
{
case 10:
memcpy(cBufftemp, "ten", sizeof("zero"));
break;
case 11:
memcpy(cBufftemp, "eleven", sizeof("eleven"));
break;
case 12:
memcpy(cBufftemp, "twelve", sizeof("twelve"));
break;
}
}
else if (iShu >= 13 && iShu <= 19)
{
// 取得个位
int iGeWeiTemp = iShu % 10;
if (iGeWeiTemp==4)
{
memcpy(cBufftemp, "four", sizeof("four"));
}
else
{
ShiWeiPrifix(iGeWeiTemp, cBufftemp);
}
Add_teen_ToEnd(cBufftemp);
}
else if (iShu >= 20 && iShu<=99)
{
char cBufftempShiWei[500] = { '\0' };
char cBufftempGeWei[500] = {'\0'};
// 取得十位
int iShiWeiTemp = iShu / 10;
ShiWeiPrifix(iShiWeiTemp, cBufftempShiWei);
Add_ty_ToEnd(cBufftempShiWei);
// 取得个位
int iGeWeiTemp = iShu % 10;
if (iGeWeiTemp==0)
{
}
else
{
Add_lian_ToEnd(cBufftempShiWei);
GeWeiRead(iGeWeiTemp, cBufftempGeWei);
}
ComBine_ToEnd(cBufftempShiWei, cBufftempGeWei);
ComBine_ToEnd(cBufftemp, cBufftempShiWei);
}
}
void BaiWeiRead(int iShu, char cBufftemp[500])
{
ClearBuf(cBufftemp);
// 取得百位
int iBaiWeiTemp = iShu / 100;
char cBufftempBaiWei[500] = { '\0' };
GeWeiRead(iBaiWeiTemp, cBufftempBaiWei);
Add_Space_ToEnd(cBufftempBaiWei);
Add_hundred_ToEnd(cBufftempBaiWei);
// 取得十位和个位
char cBufftempShiWeiGeWei[500] = { '\0' };
int iShiWeiGeWeiTemp = iShu - iBaiWeiTemp * 100;
if (iShiWeiGeWeiTemp==0)
{
}
else if (iShiWeiGeWeiTemp >= 1 && iShiWeiGeWeiTemp<=9)
{
Add_space_and_space_ToEnd(cBufftempBaiWei);
GeWeiRead(iShiWeiGeWeiTemp, cBufftempShiWeiGeWei);
}
else if (iShiWeiGeWeiTemp >= 10 && iShiWeiGeWeiTemp <= 999)
{
Add_Space_ToEnd(cBufftempBaiWei);
ShiWeiRead(iShiWeiGeWeiTemp, cBufftempShiWeiGeWei);
}
ComBine_ToEnd(cBufftempBaiWei, cBufftempShiWeiGeWei);
ComBine_ToEnd(cBufftemp, cBufftempBaiWei);
}
void SanWeiRead(int iShu, char cBuf[500])
{
// 不是三位数
if (iShu >= 1000 || iShu < 0)
{
return;
}
// 如果是一位数
if (iShu >= 0 && iShu < 10)
{
GeWeiRead(iShu, cBuf);
}
// 如果是两位数
if (iShu >= 10 && iShu < 100)
{
ShiWeiRead(iShu, cBuf);
}
// 如果是三位数
if (iShu >= 100 && iShu < 1000)
{
BaiWeiRead(iShu, cBuf);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char cBufftt[500] = { '\0' };
SanWeiRead(10, cBufftt);
SanWeiRead(11, cBufftt);
SanWeiRead(12, cBufftt);
SanWeiRead(13, cBufftt);
SanWeiRead(14, cBufftt);
SanWeiRead(15, cBufftt);
SanWeiRead(19, cBufftt);
SanWeiRead(20, cBufftt);
SanWeiRead(21, cBufftt);
SanWeiRead(29, cBufftt);
SanWeiRead(30, cBufftt);
SanWeiRead(31, cBufftt);
SanWeiRead(39, cBufftt);
SanWeiRead(40, cBufftt);
SanWeiRead(41, cBufftt);
SanWeiRead(49, cBufftt);
SanWeiRead(50, cBufftt);
SanWeiRead(52, cBufftt);
SanWeiRead(60, cBufftt);
SanWeiRead(100, cBufftt);
SanWeiRead(101, cBufftt);
SanWeiRead(104, cBufftt);
SanWeiRead(105, cBufftt);
SanWeiRead(108, cBufftt);
SanWeiRead(200, cBufftt);
SanWeiRead(204, cBufftt);
SanWeiRead(205, cBufftt);
SanWeiRead(211, cBufftt);
SanWeiRead(300, cBufftt);
SanWeiRead(301, cBufftt);
SanWeiRead(311, cBufftt);
SanWeiRead(355, cBufftt);
SanWeiRead(399, cBufftt);
SanWeiRead(400, cBufftt);
SanWeiRead(401, cBufftt);
SanWeiRead(440, cBufftt);
SanWeiRead(480, cBufftt);
SanWeiRead(801, cBufftt);
SanWeiRead(808, cBufftt);
SanWeiRead(899, cBufftt);
SanWeiRead(900, cBufftt);
SanWeiRead(911, cBufftt);
SanWeiRead(912, cBufftt);
SanWeiRead(914, cBufftt);
SanWeiRead(940, cBufftt);
SanWeiRead(918, cBufftt);
SanWeiRead(980, cBufftt);
SanWeiRead(999, cBufftt);
printf("输入一个数3位以内的数");
int iZhengShu;
scanf("%d", &iZhengShu);
char cBuff[500] = { '\0' };
SanWeiRead(iZhengShu, cBuff);
printf("%s", cBuff);
return 0;
}