vc++/c++ 汉字取拼音首字母

本文介绍了一种在Win32控制台应用程序中使用Unicode编码从汉字姓名中提取首字母的方法。通过特定的编码规则,该方法能成功地为每个汉字匹配相应的拼音首字母。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这两天花了点时间,项目中要求从汉字姓名中取出首字母,在网上试了好多个都没成功,后来根据一个比较简单的拿来改了一下。终于成功了。

win32控制台应用程序,unicode编码。测试过一些汉字,成功取出。不多说,直接上代码,因为我也不清楚原理。先用上再说。

// test2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

void FirstLetter(int nCode, char& strRet);  
void GetFirstLetter(char* strName, char* strFirstLetter, int nLen)  
{
	int ucHigh, ucLow;  
	int nCode;
	char strRet;
	memset(strFirstLetter, 0, sizeof(nLen));
	int len = 0; 
	int nameLen = (int)strlen(strName);
	for(int i=0; i < nameLen; i += 2)
	{
		ucHigh = (int)(strName[i + 0] & 0xFF);
		ucLow = (int)(strName[i + 1] & 0xFF);
		if(ucHigh < 0xa1 || ucLow < 0xa1)
		{
			continue;
		}
		else
		{
			nCode = (ucHigh - 0xa0) * 100 + ucLow - 0xa0;
		}
		FirstLetter(nCode, strRet);
		strFirstLetter[len] = strRet;
		len ++;  
	}
	strFirstLetter[len] = '\0';  
}  
void FirstLetter(int nCode, char& strLetter)  
{  
	if(nCode >= 1601 && nCode < 1637) strLetter = 'A';
	if(nCode >= 1637 && nCode < 1833) strLetter = 'B';
	if(nCode >= 1833 && nCode < 2078) strLetter = 'C';
	if(nCode >= 2078 && nCode < 2274) strLetter = 'D';
	if(nCode >= 2274 && nCode < 2302) strLetter = 'E';
	if(nCode >= 2302 && nCode < 2433) strLetter = 'F';
	if(nCode >= 2433 && nCode < 2594) strLetter = 'G';
	if(nCode >= 2594 && nCode < 2787) strLetter = 'H';
	if(nCode >= 2787 && nCode < 3106) strLetter = 'J';
	if(nCode >= 3106 && nCode < 3212) strLetter = 'K';
	if(nCode >= 3212 && nCode < 3472) strLetter = 'L';
	if(nCode >= 3472 && nCode < 3635) strLetter = 'M';
	if(nCode >= 3635 && nCode < 3722) strLetter = 'N';
	if(nCode >= 3722 && nCode < 3730) strLetter = 'O';
	if(nCode >= 3730 && nCode < 3858) strLetter = 'P';
	if(nCode >= 3858 && nCode < 4027) strLetter = 'Q';
	if(nCode >= 4027 && nCode < 4086) strLetter = 'R';
	if(nCode >= 4086 && nCode < 4390) strLetter = 'S';
	if(nCode >= 4390 && nCode < 4558) strLetter = 'T';
	if(nCode >= 4558 && nCode < 4684) strLetter = 'W';
	if(nCode >= 4684 && nCode < 4925) strLetter = 'X';
	if(nCode >= 4925 && nCode < 5249) strLetter = 'Y';
	if(nCode >= 5249 && nCode < 5590) strLetter = 'Z';
}  

int _tmain(int argc, _TCHAR* argv[])
{
	char pTemp[] = "中华人民共和国";
	int nameLen = (int)strlen(pTemp);
	char pTemp1[128];//保存汉字的首字母
	GetFirstLetter(pTemp,pTemp1,128);
	cout << pTemp1 << endl;
	getchar();
	return 0;
}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值