看到大家在讨论阿拉伯数字-》汉字数字的转换,拿出我以前写的C版本,当时写输入法的时候顺便写的,完成数字输入到汉字输出的转变
思路:倒着转换(由低位到高位),顺便去“零”,然后倒过来
//注意是Unicode版本的,根据阿拉伯数字构造汉字数字读法,去年用C写输入法的时候顺便写的
void Num2HZNum(int index, LPTSTR str, LPCTSTR strNum)
{
TCHAR line[MAX_PHRASE_LEN] = _T("");
TCHAR chNums[2][10][2] =
{
{
_T("零"), _T("一"), _T("二"), _T("三"), _T("四")
, _T("五"), _T("六"), _T("七"), _T("八"), _T("九")
},
{
_T("零"), _T("壹"), _T("贰"), _T("叁"), _T("肆")
, _T("伍"), _T("陆"), _T("柒"), _T("捌"), _T("玖")
}
};
TCHAR hz[2][MAX_NUM2ZH_LEN][2] =
{
{
_T(""), _T("十"), _T("百"), _T("千"),
_T("万"), _T("十"), _T("百"), _T("千"),
_T("亿"), _T("十"), _T("百"), _T("千"),
_T("万"), _T("十")
},
{
_T(""), _T("拾"), _T("佰"), _T("仟"),
_T("万"), _T("拾"), _T("佰"), _T("仟"),
_T("亿"), _T("拾"), _T("佰"), _T("仟"),
_T("万"), _T("拾")
}
};
int i;
int pos = 0;
TCHAR temp[MAX_PHRASE_LEN];
for (i=_tcslen(strNum)-1; i>=0; i--)
{
temp[_tcslen(strNum)-1-i] = strNum[i];
}
*line = _T('\0');
for (i=0; i<(int)_tcslen(strNum); i++)
{
if (temp[i] != _T('0') || hz[index][i][0] == _T('万') || hz[index][i][0] == _T('亿'))
_tcscat(line, hz[index][i]);
if (temp[i] == _T('0')
&& (i == 0
|| temp[i-1] == _T('0')
|| line[_tcslen(line) - 1] == _T('万')
|| line[_tcslen(line) - 1] == _T('亿')
)
)
continue;
_tcscat(line, chNums[index][temp[i] - _T('0')]);
}
for (i=0; i<(int)_tcslen(line); i++)
{
str[i] = line[_tcslen(line) - 1 -i];
}
str[i] = _T('\0');
}
其他讨论参见:
http://www.cnblogs.com/farrio/archive/2005/03/30/128582.html?Pending=true#Post
http://www.cnblogs.com/laser_lu/archive/2005/03/30/128464.html
http://www.cnblogs.com/zane/archive/2005/03/30/128509.html?Pending=true#Post
思路:倒着转换(由低位到高位),顺便去“零”,然后倒过来
//注意是Unicode版本的,根据阿拉伯数字构造汉字数字读法,去年用C写输入法的时候顺便写的
void Num2HZNum(int index, LPTSTR str, LPCTSTR strNum)
{
TCHAR line[MAX_PHRASE_LEN] = _T("");
TCHAR chNums[2][10][2] =
{
{
_T("零"), _T("一"), _T("二"), _T("三"), _T("四")
, _T("五"), _T("六"), _T("七"), _T("八"), _T("九")
},
{
_T("零"), _T("壹"), _T("贰"), _T("叁"), _T("肆")
, _T("伍"), _T("陆"), _T("柒"), _T("捌"), _T("玖")
}
};
TCHAR hz[2][MAX_NUM2ZH_LEN][2] =
{
{
_T(""), _T("十"), _T("百"), _T("千"),
_T("万"), _T("十"), _T("百"), _T("千"),
_T("亿"), _T("十"), _T("百"), _T("千"),
_T("万"), _T("十")
},
{
_T(""), _T("拾"), _T("佰"), _T("仟"),
_T("万"), _T("拾"), _T("佰"), _T("仟"),
_T("亿"), _T("拾"), _T("佰"), _T("仟"),
_T("万"), _T("拾")
}
};
int i;
int pos = 0;
TCHAR temp[MAX_PHRASE_LEN];
for (i=_tcslen(strNum)-1; i>=0; i--)
{
temp[_tcslen(strNum)-1-i] = strNum[i];
}
*line = _T('\0');
for (i=0; i<(int)_tcslen(strNum); i++)
{
if (temp[i] != _T('0') || hz[index][i][0] == _T('万') || hz[index][i][0] == _T('亿'))
_tcscat(line, hz[index][i]);
if (temp[i] == _T('0')
&& (i == 0
|| temp[i-1] == _T('0')
|| line[_tcslen(line) - 1] == _T('万')
|| line[_tcslen(line) - 1] == _T('亿')
)
)
continue;
_tcscat(line, chNums[index][temp[i] - _T('0')]);
}
for (i=0; i<(int)_tcslen(line); i++)
{
str[i] = line[_tcslen(line) - 1 -i];
}
str[i] = _T('\0');
}
其他讨论参见:
http://www.cnblogs.com/farrio/archive/2005/03/30/128582.html?Pending=true#Post
http://www.cnblogs.com/laser_lu/archive/2005/03/30/128464.html
http://www.cnblogs.com/zane/archive/2005/03/30/128509.html?Pending=true#Post
浙公网安备 33010602011771号