中文數字轉阿拉伯數字

2021-08-20 02:12:52 字數 3689 閱讀 5642

這個題與leetcode第13題羅馬數字轉換很相似 13. roman to integer

我開始想用c++處理,進行漢字「個十百千萬」與數字的對應,但是中文字元不屬於ascii碼,直接使用標準類模板裡的string會導致漢字亂碼。

所以得使用寬字串wstring和寬字元wchar_t

使用stl中的map容器儲存漢字數字與阿拉伯數字的對映關係

然後就是從到右進行漢字數字的讀取了

wstring test;//定義寬字串

wcin >> test;//輸入:華師

wcout << test << endl;//輸出:華師

但是在**中定義寬字元時需要指定本地的系統區域locale

wcout.imbue(locale("chs"));//指定系統區域設定,chs為中國

wstring test1 = l"華師";//寬字串前面需要加 l

wcout << test1 << endl;//輸出華師

其中我用了乙個寬字串陣列wstring testdict儲存我的測試用例,進行大小定義時候可以動態定義或者自定義,不過自定義的大小不能小於賦值的個數

string testdict = ;

//等價於

string testdict[4] = ;

但是定義為:

string testdict[3] = ;//將導致編譯錯誤
也可以定義為:

string testdict[5] = ;

//其中testdict[4]將為""

在進行for迴圈挨個取出測試用例時候需要知道陣列的大小,我開始使用了testdict->size()這一方法,但是卻發現獲取的大小不對,才發現testdict->size()這一方法返回的大小與陣列中第乙個元素的長度相同

要想獲得陣列的大小需使用sizeof,c++中用類模板可以方便的構造乙個函式獲取陣列大小

template

int getarraylen(t& array)

string testdict = ;

cout

<< getarraylen(testdict) << endl;//4

cout

<< testdict->size() << endl;//2

cout

<< testdict->length() << endl;//2

cout

<< testdict[0].length() << endl;//2

cout

<< testdict[0].size() << endl;//2

cout

<< testdict[1].length() << endl;//5

cout

<< testdict[1].size() << endl;//5

在c中可以使用巨集定義

#include 

#include

//定義乙個帶引數的 巨集,將陣列長度儲存在變數len中

#define get_array_len(array,len)

int main()

; int len;

get_array_len(a, len) //呼叫預定義的巨集,取得陣列a的長度,並將其儲存在變數len中

printf("%d\n", len);

system("pause");

return

0;}

參考:

突然發現c/c++中對整數0的處理時將0視為null

printf("%d", (0==null));//c:1,0==null為true
cout<

:1,0==null為true

在c++11的標準中加了乙個用來表示空指標的常量值——nullptr在c中表示空指標的巨集null是這樣定義的:

#define

null ((void

*)0)

這樣就可以表示空指標的,但是在c++中這個巨集是不可以的,因為c++的型別檢查比c更嚴格,不允許把void *型別的指標賦給指標變數,因此在c++中巨集null是這樣定義的:

#ifndef null

#ifdef __cplusplus

#define null 0

#else

#define null ((void *)0)

#endif

#endif

顯然,在c++中null的值和0是等價的。然而這就引發了乙個嚴重的過載問題,例如下面兩個函式:

void fun(int a, int *b);

void fun(int a, int b);

如果我問程式中有如下呼叫:

int a = 0;

fun(a,null);

可以看出我們想呼叫的是:void fun(int a, int *b);但實際上我們呼叫的是第二個函式。

而c++11中新增的nullptr就可以解決這個過載問題,減少很多不必要的bug,編譯環境允許的話,還是多多使用nullptr吧。

最終完整 中文數字轉阿拉伯數字cpp**:

同時也給出中文數字轉阿拉伯數字python3**,python3中字元統一為unicode編碼,沒有那麼多煩惱:中文數字2阿拉伯數字.py

參考:

用 python 將中文數字轉換成阿拉伯數字

中文數字轉阿拉伯數字

中文數字的權位是明的,阿拉伯數字的權位則隱含在數字的位置中。怎麼將文字權位轉換為數字權位,下面解析。對於十進位制阿拉伯數字,數字的所在位數就是該數字與10的倍數關係。個位就是1倍,十位就是10倍,以此類推。通過這個關係,可以將阿拉伯數字隱含的權位轉換成10的倍數表示,比如 四萬兩千五百一十二 等於 ...

阿拉伯數字轉中文數字

推薦閱讀 例如 將102轉為一百零二 將08轉為八。local chnnumchar local chnunitchar local chnunitsection local function sectiontochinese section,chinesenum local setionchine...

php 阿拉伯數字轉中文數字 方法

function ch num num,mode true char array 零 壹 貳 叄 肆 伍 陸 柒 捌 玖 dw array 拾 佰 仟 萬 億 兆 dec 點 retval if mode preg match all 0 d d num,ar else preg match all...