我的程式設計學習日誌(15)--C/C++實現輸出漢字拼音的首字母
說實話,寫的程式越多,就越討厭漢字,因為漢字在計算機裡的編碼不統一,不像英文字母那樣一個ascll碼就解決。
就比如做的那個地鐵導航,還有flppy bird程式,當時就被怎麼查漢字還有漢字編碼轉換問題弄得身心疲憊。
前幾天有人問我地鐵導航裡的pinyin()等函式是做什麼的,那個就是用來返回漢字拼音的首字母。
這段程式碼是網上看到的,並做了一點修改,不過主體沒變。
另外,這段程式碼幾乎所有的部落格都有人轉載,但卻沒人註明原作者。
嘛,在這裡向原作者致敬。
程式碼:
#include <iostream> #include <string> using namespace std; char convert(wchar_t n) { if (In(0xB0A1,0xB0C4,n)) return 'a'; if (In(0XB0C5,0XB2C0,n)) return 'b'; if (In(0xB2C1,0xB4ED,n)) return 'c'; if (In(0xB4EE,0xB6E9,n)) return 'd'; if (In(0xB6EA,0xB7A1,n)) return 'e'; if (In(0xB7A2,0xB8c0,n)) return 'f'; if (In(0xB8C1,0xB9FD,n)) return 'g'; if (In(0xB9FE,0xBBF6,n)) return 'h'; if (In(0xBBF7,0xBFA5,n)) return 'j'; if (In(0xBFA6,0xC0AB,n)) return 'k'; if (In(0xC0AC,0xC2E7,n)) return 'l'; if (In(0xC2E8,0xC4C2,n)) return 'm'; if (In(0xC4C3,0xC5B5,n)) return 'n'; if (In(0xC5B6,0xC5BD,n)) return 'o'; if (In(0xC5BE,0xC6D9,n)) return 'p'; if (In(0xC6DA,0xC8BA,n)) return 'q'; if (In(0xC8BB,0xC8F5,n)) return 'r'; if (In(0xC8F6,0xCBF0,n)) return 's'; if (In(0xCBFA,0xCDD9,n)) return 't'; if (In(0xCDDA,0xCEF3,n)) return 'w'; if (In(0xCEF4,0xD188,n)) return 'x'; if (In(0xD1B9,0xD4D0,n)) return 'y'; if (In(0xD4D1,0xD7F9,n)) return 'z'; return '\0'; } bool In(wchar_t start, wchar_t end, wchar_t code) { if (code >= start && code <= end) { return true; } return false; } char pinyin(string sChinese) { char chr[3]; wchar_t wchr = 0; char buff=0x00; int j=0,i=0; memset(chr, 0x00, sizeof(chr)); chr[0] = sChinese[j++]; chr[1] = sChinese[j++]; chr[2] = '\0'; wchr = 0; wchr = (chr[0] & 0xff) << 8; wchr |= (chr[1] & 0xff); buff = convert(wchr); return buff; } int main() { string s="哦"; char aa; aa=pinyin(s); cout << "pin yin = [" << aa << "]" << endl; return 0; }
相關推薦
我的程式設計學習日誌(15)--C/C++實現輸出漢字拼音的首字母
說實話,寫的程式越多,就越討厭漢字,因為漢字在計算機裡的編碼不統一,不像英文字母那樣一個ascll碼就解決。 就比如做的那個地鐵導航,還有flppy bird程式,當時就被怎麼查漢字還有漢字編碼轉換問
我的程式設計學習日誌(5)-- 教你快速的輸入程式碼(程式設計競賽中的小技巧)
1,typedef簡化輸入 在程式設計中如果用到結構體,每次定義變數時都要輸很長的程式碼,特別是在建連結串列時,經常重複輸入struct…,為了避免這種重複,可以用typedef 。 不過不建議在實際
Javascript高階程式設計學習筆記(15)—— 引用型別(4)RegExp型別
JS中處理字串最常用的應該就是正則了 同樣正則(RegExp)型別也是JS中引用型別的一種 ECMAScript通過 RegExp型別 來支援正則表示式 建立正則 var expression = / pattern / flags; 在上面建立正則例項中 pattern
C++基礎教程面向物件(學習筆記(15))
類中的巢狀型別 考慮以下簡短程式: #include <iostream> enum FruitType { APPLE, BANANA, CHERRY }; class Fruit { private: FruitType m_ty
程式設計學習小結(1)基本概念----c語言
---- 雲端計算、大資料、人工智慧,新技術層出不窮,摳碼愈久,無力感愈強。IT已經從個人英雄時代進化為一個需要高度協調配合的社會了。作為一個“搞計算機的”被別人問到:“那個XXX軟體,我們公司話好多錢買的,你能不能自己做一個?”,回答不能還要加各種解釋……;但是也有人問:“計算
我的學習方法(一)
職位 代碼 提升自己 語言 做什麽 工資 分配 需要 修正 (本文引用有點亂,大部分都是引用別人的觀點,但是記錄的時候沒記從哪搞的,所以這篇就只好先這樣記著了。。。以後一定記得標明引用地點) 重復性工作占了一大半,周末要加班,怎麽勞逸結合提升自己?既然是重復性工作,就想辦法
JavaScript學習日誌(二):面向對象的程序設計
循環 理想 soft 日誌 傳遞 數組 用例 定義 基本類型 1,ECMAScript不像其他面向對象的語言那樣有類的概念,它的對象與其他不同。 2,ECMAScript有兩種屬性:數據屬性和訪問器屬性。([[]]這種雙中括號表示屬性為內部屬性,外部不可直接訪問) 1.數據
JavaScript學習日誌(四):BOM
特殊符號 對話框 核心 混淆 == script delet 網頁 port BOM的核心對象就是window,這一章沒什麽好說的,總結一些比較常用的: 1,a未定義,a; //報錯window.a; //undefined 不能用delete刪除全局變量 2
我的學習方法(三)
-- 思考 簡單 繼續 裏的 學校 是否 藝術學院 無法 之前說過放假要好好整理一些東西,今天有空就來寫一篇日誌吧。 最近是高考結束後學弟學妹們選專業,確定學校的日子了,雖然現在寫好像有點過時了,很多人專業什麽都已經定了,但是沒辦法,到現在才把腦
JavaScript學習日誌(七):表單腳本
prev 調用 don 表單 rip 如果 html image 集合 一,基礎知識 1,取得<form>元素引用的方式,常用的是通過id,其次可以通過document.forms可以取得頁面中所有的表單,在這個集合中,可以通過數值索引或name值來取得特定的表
PCIe學習筆記(15)--- TLP的ROUTING方式
ecif 一點 gis 2.0 一個 receiver 學習 hot plug 判斷 PCIE是POINT TO POINT的,不像PCI,是SHARED-BUS,總線上的數據,是被所有EP DEV看到的。 這一點與USB2.0比較類似,是廣播方式的(BROADCASTIN
Linux第一周學習筆記(15)
str 第一周 單獨 make 創建目錄 單獨使用 無法 新的 必須 Linux第一周學習筆記(15)2.8.創建和刪除目錄mkdir命令(make directory簡寫):用於創建目錄mkdir –p命令:級聯創建多個目錄mkdir–pv命令:可視化級聯創建多個目錄rm
抽象代數學習筆記(15)環
整數 pos amp gin 定義 div 因子 log 所有 定義:設集合\(R\)上有兩種二元運算,一個叫加法,記為\(+\);一個叫乘法,記為\(*\),且\((R,+)\)是個交換群;乘法\(*\)在\(R\)上是結合的;對任意\(a,b,c\in R\),都有\
Windows Service 學習系列(二):C# windows服務:安裝、解除安裝、啟動和停止Windows Service
一、通過CMD安裝、解除安裝、啟動、停止Windows Service 方法一 1.以管理員身份執行cmd 2.安裝windows服務 切換cd C:\Windows\Microsoft.NET\Framework\v4.0.30319(InstallUtil.e
ActiveMQ學習筆記(15)----Message Dispatch高階特性(一)
1. Message Cursors 1.1 概述 ActiveMQ傳送持久化訊息的典型的厝裡方式是:當訊息的消費者準備就緒時,訊息傳送系統把儲存的訊息按批次傳送給消費者,在傳送完一個批次的訊息後,指標的標記位置指向下一個批次的待發訊息的位置,進行後續的傳送操作。這是一種 比較健壯和靈活的訊息傳送
Spark學習筆記(15)——Spark Streaming 整合 Flume
1 flume 配置檔案 在 flume-env.sh 裡配置 JAVA_HOME 1.1 flume-pull.conf # Name the components on this agent a1.sources = r1 a1.sinks = k1 a1.chan
java丨事件驅動程式設計學習筆記(二)
一、匿名監聽器 監聽器類是特意為建立一個GUI元件(例如,一個按鈕)而設計的監聽物件。監聽器類不被其他應用程式所共享,因此,正確的做法是將它作為一個內部類定義在框架中。 可以使用匿名內部類簡化內部類監聽器。匿名內部類時沒有名字的內部類。它進一步完成定義內部類和建立一個該類的例項。 內部類Enlarg
ActiveMQ 從零開始 學習日誌(一)
一:常用MQ 框架 ActiveMQ ActiveMQ 是Apache出品,最流行的,能力強勁的開源訊息匯流排。ActiveMQ 是一個完全支援JMS1.1和J2EE 1.4規範的 JMS Provider實現,儘管JMS規範出臺已經是很久的事情了,但是JMS在當今的J2EE應用中間仍然扮
吳恩達深度學習總結(15)
自然語言處理與詞嵌入 詞彙表徵 基於遷移學習訓練word embedding 步驟 類比推理演算法 Embedding matrix skip gram CBOW 負取樣 GloVe
Excel中VBA程式設計學習筆記(三)
12、使用InputBox函式進行輸入 語法如下: InputBox(prompt [,title] [,default] [,xpos] [,ypos] [,helpfile,context]) 引數說明: prompt為提示內容,必選; title對