1. 程式人生 > >我的程式設計學習日誌(15)--C/C++實現輸出漢字拼音的首字母

我的程式設計學習日誌(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—— 引用型別4RegExp型別

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對