這個題與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...