日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言数字储存于变量,用C语言写中文数字字符串转数值变量

發布時間:2023/12/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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语言写中文数字字符串转数值变量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。