PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
[問題] C語言--輸出中文字元陣列中單一字元的問
作者:
skyHuan
(Huan)
2017-11-03 14:49:21
遇到的問題:
(1) string中含2bytes的中文字符及1byte的空格字元要如何計算strlen
(2) 2bytes的中文字符string中要如何輸出單一字元(一般string中的string[0])
問題詳細描述:
我想要用既有的詞庫建一個詞庫,修改成我想要的格式
既有詞庫原本的格式為:
一 般 直 些 時 定 月 點
丁 二烯 烷 香
七 彩 嘴八舌 里香 零八落 情六慾
丈 夫 量 母娘 人
希望輸出為(50是預設詞頻):
一般 50 一直 50 一些 50 一時 50 一定 50 一月 50 一點 50
丁二烯 50 丁烷 50 丁香 50
七彩 50 七嘴八舌 50 七里香 50 七零八落 50 七情六慾 50
丈夫 50 丈量 50 丈母娘 50 丈人 50
以下是我的程式碼:
https://drive.google.com/open?id=1QGOG5uFO22OAcs9pgV83eVB41FpltqI-
如果輸入的檔案是英文可以正確執行
https://imgur.com/cVr45nT
但如果輸入的檔案是中文就會變成亂碼
上網查了一下是因為在中文編碼中一個字元佔2bytes
用%c輸出一次只能輸出1byte
有看到資料說好像可以將char型別改為wchar_t
strlen的部分用wcslen替換
我用上面程式碼中的第22行(被註解掉的那行)做了一些測試
好像還是有一些問題
https://imgur.com/jLvgT6L
最後一筆測資”你好嗎”的wcslen似乎就有錯誤
輸入檔案中有夾帶1byte的空格字元似乎也不能完全用wcslen算字元數
另外試了一下若輸入為中文時想只輸出一個中文字元(例如第一個字元)
printf(“%c”, data_buf[0])
試過用%c或%ls好像都會出現亂碼或是錯誤
問了幾位平常有在coding的同學
好像都沒有處理過中文的問題
還請版上各位前輩幫忙了,感謝
作者:
MOONRAKER
(㊣牛鶴鰻毛人)
2017-11-03 15:05:00
用%s輸出 第一個漢字就用substr取最前面兩個字元
作者:
stupid0319
(徵女友)
2017-11-03 16:03:00
中文有UTF-8,UTF-16,跟BIG5,UTF8跟UTF16的碼是一樣的但UTF8存在記憶體的方式不同,詳細要上網查看看程式預設比較建議用unicode來編碼,可以吃萬國碼看你程式應該是用BIG5,也就是多字元,查一下規則把BIG5規則代入你的code中就不會有亂碼了BIG5不太能用wchar來處理,碰到單個字母就會有亂碼
作者: serikafan
2017-11-03 17:09:00
用wchar請用mbstowcs或是MultiByteToWideChar去轉換在程式碼中直接用中文會跟檔案編碼跟編譯器有無支援相關,最好避免這麼做英文出現亂碼是因為你忘了在結尾補\0你的問題用wchar應該比較好解決
https://ideone.com/wazkGa
繼續閱讀
[問題] 有關switch的小問題
change5413
[問題] casting operator的問題
loveflames
[問題] c語言基礎觀念請教
unknown
[問題] 字串反轉問題
uni1021
[問題] C寫接龍遊戲
xie29
[問題] C遞迴將陣列內容反向輸出
x93939512
[問題] 視覺機器人
aris1008
[問題] constructor assignment與initializer
ab18282099
[問題] dev C++執行一次關掉後再開error
yuehyueh24
[問題] 字串宣告後印出
eecheng87
Links
booklink
Contact Us: admin [ a t ] ucptt.com