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