
function GetPYIndexChar( hzchar:string):char;
case WORD(hzchar[1]) shl 8 + WORD(hzchar[2]) of
$B0A1$B0C4 : result := 'A';
$B0C5$B2C0 : result := 'B';
$B2C1$B4ED : result := 'C';
$B4EE$B6E9 : result := 'D';
$B6EA$B7A1 : result := 'E';
$B7A2$B8C0 : result := 'F';
$B8C1$B9FD : result := 'G';
$B9FE$BBF6 : result := 'H';
$BBF7$BFA5 : result := 'J';
$BFA6$C0AB : result := 'K';
$C0AC$C2E7 : result := 'L';
$C2E8$C4C2 : result := 'M';
$C4C3$C5B5 : result := 'N';
$C5B6$C5BD : result := 'O';
$C5BE$C6D9 : result := 'P';
$C6DA$C8BA : result := 'Q';
$C8BB$C8F5 : result := 'R';
$C8F6$CBF9 : result := 'S';
$CBFA$CDD9 : result := 'T';
$CDDA$CEF3 : result := 'W';
$CEF4$D188 : result := 'X';
$D1B9$D4D0 : result := 'Y';
$D4D1$D7F9 : result := 'Z';
else
result := char(0);
end;
end;
以下是我的原码100%可以
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
function GetPYIndexChar( hzchar:string):char;
var
Form1: TForm1;
implementation
{$R dfm}
function GetPYIndexChar( hzchar:string):char;
begin //的到一个汉字的拼音头个字母
case WORD(hzchar[1]) shl 8 + WORD(hzchar[2]) of
$B0A1$B0C4 : result := 'A';
$B0C5$B2C0 : result := 'B';
$B2C1$B4ED : result := 'C';
$B4EE$B6E9 : result := 'D';
$B6EA$B7A1 : result := 'E';
$B7A2$B8C0 : result := 'F';
$B8C1$B9FD : result := 'G';
$B9FE$BBF6 : result := 'H';
$BBF7$BFA5 : result := 'J';
$BFA6$C0AB : result := 'K';
$C0AC$C2E7 : result := 'L';
$C2E8$C4C2 : result := 'M';
$C4C3$C5B5 : result := 'N';
$C5B6$C5BD : result := 'O';
$C5BE$C6D9 : result := 'P';
$C6DA$C8BA : result := 'Q';
$C8BB$C8F5 : result := 'R';
$C8F6$CBF9 : result := 'S';
$CBFA$CDD9 : result := 'T';
$CDDA$CEF3 : result := 'W';
$CEF4$D188 : result := 'X';
$D1B9$D4D0 : result := 'Y';
$D4D1$D7F9 : result := 'Z';
else
result := char(0);
end;
end;
procedure TForm1Button1Click(Sender: TObject);
begin
edit2Text:=GetPYIndexChar(edit1Text);
end;
end
- (NSString)firstCharactor:(NSString)aString
{
//转成了可变字符串
NSMutableStringstr = [NSMutableStringstringWithString:aString];
//先转换为带声调的拼音
CFStringTransform((CFMutableStringRef)str,NULL,kCFStringTransformMandarinLatin,NO);
//再转换为不带声调的拼音
CFStringTransform((CFMutableStringRef)str,NULL,kCFStringTransformStripDiacritics,NO);
//转化为大写拼音
NSStringpinYin = [strcapitalizedString];
//获取并返回首字母
return[pinYinsubstringToIndex:1];
}
// 简体中文的编码范围从B0A1(45217)一直到F7FE(63486)
private static int BEGIN = 45217;
private static int END = 63486;
// 按照声母表示,这个表是在GB2312中的出现的第一个汉字,也就是说“啊”是代表首字母a的第一个汉字。
// i, u, v都不做声母, 自定规则跟随前面的字母
private static char[] chartable = { '啊', '芭', '擦', '搭', '蛾', '发', '噶', '哈',
'哈', '击', '喀', '垃', '妈', '拿', '哦', '啪', '期', '然', '撒', '塌', '塌',
'塌', '挖', '昔', '压', '匝', };
// 二十六个字母区间对应二十七个端点
// GB2312码汉字区间十进制表示
private static int[] table = new int[27];
// 对应首字母区间表
private static char[] initialtable = { 'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'h', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
't', 't', 'w', 'x', 'y', 'z', };
// 初始化
static {
for (int i = 0; i < 26; i++) {
table[i] = gbValue(chartable[i]);// 得到GB2312码的首字母区间端点表,十进制。
}
table[26] = END;// 区间表结尾
}
// ------------------------public方法区------------------------
/
根据一个包含汉字的字符串返回一个汉字拼音首字母的字符串 最重要的一个方法,思路如下:一个个字符读入、判断、输出
/
public static String cn2py(String SourceStr) {
String Result = "";
int StrLength = SourceStrlength();
int i;
try {
for (i = 0; i < StrLength; i++) {
Result += Char2Initial(SourceStrcharAt(i));
}
} catch (Exception e) {
Result = "";
}
return Result;
}
// ------------------------private方法区------------------------
/
输入字符,得到他的声母,英文字母返回对应的大写字母,其他非简体汉字返回 '0'
/
private static char Char2Initial(char ch) {
// 对英文字母的处理:小写字母转换为大写,大写的直接返回
if (ch >= 'a' && ch <= 'z')
return (char) (ch - 'a' + 'A');
if (ch >= 'A' && ch <= 'Z')
return ch;
// 对非英文字母的处理:转化为首字母,然后判断是否在码表范围内,
// 若不是,则直接返回。
// 若是,则在码表内的进行判断。
int gb = gbValue(ch);// 汉字转换首字母
if ((gb < BEGIN) || (gb > END))// 在码表区间之前,直接返回
return ch;
int i;
for (i = 0; i < 26; i++) {// 判断匹配码表区间,匹配到就break,判断区间形如“[,)”
if ((gb >= table[i]) && (gb < table[i+1]))
break;
}
if (gb==END) {//补上GB2312区间最右端
i=25;
}
return initialtable[i]; // 在码表区间中,返回首字母
}
/
取出汉字的编码 cn 汉字
/
private static int gbValue(char ch) {// 将一个汉字(GB2312)转换为十进制表示。
String str = new String();
str += ch;
try {
byte[] bytes = strgetBytes("GB2312");
if (byteslength < 2)
return 0;
return (bytes[0] << 8 & 0xff00) + (bytes[1] & 0xff);
} catch (Exception e) {
return 0;
}
}
//测试
public static void main(String[] args) throws Exception {
// Systemoutprintln(cn2py("云飞扬"));
//1从数据库取出名字集合
//比如
ArrayList list=new ArrayList();
listadd("张三");
listadd("李四");
listadd("王五");
listadd("张名");
listadd("敌法师");
listadd("分三");
ArrayList lis2=null;
Hashtable<String, ArrayList> table =new Hashtable<String, ArrayList>();
int count=listsize();
String chainName;
String allpy;
String fir;
for(int i=0;i<count;i++){
chainName=listget(i)toString();//中文
allpy= cn2py(chainName); //拼音
fir=allpysubstring(1); //首字母
lis2=tableget(fir);
if(lis2==null||lis2size()==0)
lis2=new ArrayList();
lis2add(chainName);
tableput(fir,lis2);
}
}
/已经修改如下
@author:banxi1988
@date:2010-12-9
/
#include<stdioh>
#include<stdlibh>
#include<stringh>
#define M 5 /同学的人数 如果你想多输入些的话自己改吧 /
void input(char name[],int n);
void sort(char name[],int n);
int main(int argc, char agrv){
char name[M]; /保存学生的名字/
int i= 0;
input(name,M);
sort(name,M);
printf("名字按拼音排列输出如下:\n");
for(i=0;i<M;i++)
{
printf("%s\t",name[i]);
}//for:
printf("\n");
return 0;
}//
void input(char name[],int n){
char str[20]; /拼音的长度 20-1 ,自己改 /
int i;
printf("请输入 %d 个学生的名字(请用拼音) :\n",M);
/ 这里也比较关键,好好领会/
for(i=0; i < n; i++)
{
scanf("%s",str);
name[i] = (char )malloc(sizeof(char)(strlen(str)));
strcpy(name[i],str);
}//for:
}//input
void sort(char name[],int n){
/冒泡法实现排序/
char tmp;
int i,j;
for(i=0;i<n;i++)
{
for(j=1;j<n-i;j++)
{
/两个名字位置交换,将较大的名字放到数组的前面/
if(strcmp(name[j],name[j-1])<0)
{
tmp=name[j-1];
name[j-1]= name[j];
name[j]=tmp;
}
}//inner for
}//outer for
}//sort
/ 测试结果:
请输入 5 个学生的名字(请用拼音) :
abc cano java perl banxi
名字按拼音排列输出如下:
abc banxi cano java perl
/
js写的有点老了,你看着用吧function getFirstPyLetter(strData){//返回首字符的ASCII码
execScript("ascii=asc(\"" + strData + "\")", "vbscript"); // 不支持 ff
//加上65536获取汉字的ASCII码
ascii = 65536 + ascii;
var py = "";
//根据所得ASCII判断其首拼音字母
if(ascii >= 45217 && ascii <= 45252){py = "A";}else if(ascii >= 45253 && ascii <= 45760){py = "B";}else if(ascii >= 45761 && ascii <= 46317){py = "C";}else if(ascii >= 46318 && ascii <= 46825){py = "D";}else if(ascii >= 46826 && ascii <= 47009){py = "E";}else if(ascii >= 47010 && ascii <= 47296){py = "F";}// 鲑 = 63193(特殊)
else if((ascii >= 47297 && ascii <= 47613) || (ascii == 63193)){py = "G";}else if(ascii >= 47614 && ascii <= 48118){py = "H";}else if(ascii >= 48119 && ascii <= 49061){py = "J";}else if(ascii >= 49062 && ascii <= 49323){py = "K";}else if(ascii >= 49324 && ascii <= 49895){py = "L";}else if(ascii >= 49896 && ascii <= 50370){py = "M";}else if(ascii >= 50371 && ascii <= 50613){py = "N";}else if(ascii >= 50614 && ascii <= 50621){py = "O";}else if(ascii >= 50622 && ascii <= 50905){py = "P";}else if(ascii >= 50906 && ascii <= 51386){py = "Q";}else if(ascii >= 51387 && ascii <= 51445){py = "R";}else if(ascii >= 51446 && ascii <= 52217){py = "S";}else if(ascii >= 52218 && ascii <= 52697){py = "T";}else if(ascii >= 52698 && ascii <= 52979){py = "W";}else if(ascii >= 52980 && ascii <= 53688){py = "X";}else if(ascii >= 53689 && ascii <= 54480){py = "Y";}else if(ascii >= 54481 && ascii <= 62289){py = "Z";}else{//不是中文返回本身
以上就是关于delphi中如何获取汉字的拼音首字母~!全部的内容,包括:delphi中如何获取汉字的拼音首字母~!、汉字转拼音获取拼音首字母并大写、如何获得汉字拼音的首字母序列等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)