c语言数字储存于变量,用C语言写中文数字字符串转数值变量
用C語言寫中文數(shù)字字符串轉(zhuǎn)數(shù)值變量
C語言寫中文數(shù)字字符轉(zhuǎn)數(shù)值變量
最近突發(fā)奇想:程序中要是輸入一串中文數(shù)字,如“十萬”就能自動識別轉(zhuǎn)換成數(shù)值100000儲存到變量里該多好。
也許你會說,那很簡單啊,先將中文字符分開,再各自識別成數(shù)值,最后乘上位數(shù)相加就行了。可是實際操作時你會發(fā)現(xiàn)這并不容易。比如“一億三千五百萬”中,如何確定“三”屬于千萬位的?或者我想讓程序更智能化一些,同時實現(xiàn)如“一百三十”=“一三零”=“1百3”=“百三”=130,那就不會那么簡單了。
為了實現(xiàn)這一轉(zhuǎn)換,可以按以下思路編寫:
1.可以用兩個數(shù)組分別儲存單位和每個單位對應(yīng)的數(shù)字。其中不同的單位用不同的數(shù)值標(biāo)識。再記錄下下標(biāo)長度。
2.然后將輸入的中文數(shù)字整理成這種形式:*萬*百*個。其中*代表一個正整數(shù)(可以大于10),萬、百、個代表單位。比如:“一億五十六萬三千”整理成1億56萬3千。這個過程最好使用遞歸。接著可以將數(shù)值相乘疊加。
3.最后,為了處理如“二百五”=250的情況,還要檢索下“百”位后是否還有“零”。
下面給出詳細(xì)代碼以供參考:
#define MAX 32
//先定義支持的中文符號:(單位數(shù)值由小到大排列,方便判斷單位和數(shù)值大小)
char _NUMBER[59]="零一壹二貳三叁四肆五伍六陸七柒八捌九玖十拾廿百佰千仟萬兆億";
//遞歸輔助函數(shù),
double _Num(double *num,char *wei,char len)//參數(shù)分別對應(yīng)按字符識別好的數(shù)字,位,位數(shù)
{
double i, a, tmp;//臨時數(shù)字
char w;//用來作位數(shù)指針
char c;//臨時指針
char x;//臨時指針
w = len - 1;
//下面檢測從右到左,單位大小是否由小變大,如“五千萬五千”的單位順序就不是
while(w>0)
{
if(*(wei+w-1) <= *(wei+w)) //檢測到左邊單位≤右邊單位
{
c = w;//記錄右邊單位在wei中的位置
w--;
//下面檢索到左邊單位比右邊單位大為止
while(*(wei+w-1)<=*(wei+c) && w)
w--;
//中間c-w個單位進(jìn)行遞歸整合成一個數(shù)值,這個數(shù)值屬于c記錄的單位
*(num+w) = _Num(num+w,wei+w,c-w) + *(num+c);
len = len - c + w;//單位數(shù)減少,有c-w個單位整合成一個數(shù)值了
//下面要將原來c記錄的右邊的單位及其數(shù)值進(jìn)行左移
for(x=w+1;x<len;x++) //移動數(shù)值
*(num+x) = *(num+x+c-w);
for(x=w;x<len;x++)//移動位
*(wei+x) = *(wei+x+c-w);
}
w--;
}
//經(jīng)過上面處理之后,單位排列的順序從左到右將是由大到小的,我們就可以放心處理了
a = 0;//臨時計算用數(shù)
c = 0;
while(c<len)//計算
{
tmp = *(num+c);//計算出的單位數(shù)值
switch(*(wei+c))//識別單位序號
{
case 10: i = 10;break;//
總結(jié)
以上是生活随笔為你收集整理的c语言数字储存于变量,用C语言写中文数字字符串转数值变量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode跳跃游戏C语言,Leet
- 下一篇: android怎样添加图片锐化功能,如何