提问了好几次,都没有结果,帮帮我吧!
提问了好几次,都没有结果,帮帮我吧!
楼主hhdick(kjk)2002-07-21 19:34:49 在 C++ Builder / 基础类 提问 在数据库查询中,例如要查询“中国”这条记录,则在文本框中输入“中国”就可以查询,现在要实现在文本框中输入“zg”(即这两个字的拼音第一个字母)也要可以进行查询。
谁能帮帮我! 问题点数:0、回复次数:11Top
1 楼codecb(阿星)回复于 2002-07-21 19:37:45 得分 0
gz
up
Top
2 楼POLOM(北岸)回复于 2002-07-21 19:52:26 得分 0
如果要求达到自动的目的,则我想这不是一个简单的问题,有相当的难度。
如果允许记录录入员配合,则提供个思路,首先在给表中添加一个字段,存储需要查询字段对应的拼音声母,然后记录录入时给相应的中文录入拼音声母。Top
3 楼airspace(笨鸟)回复于 2002-07-21 20:11:57 得分 0
找个拼音组件!Top
4 楼jishiping(JSP 季世平)回复于 2002-07-21 20:16:26 得分 0
已经在另一个贴子回答了,这儿复制一遍:
这个问题不容易啊。但是对搞拼音输入法的人来说,是小菜一碟。我们不要
像拼音输入法那么复杂,简单一点的方法就是:生成每个汉字的第一个拼音
字母的对照表,这个对照表可以用一个文件保存,同时,在数据库增加一个
字段,字段的值就是对应的中文字段的第一个拼音组成。在往数据库添加纪
录时,中文名可以由用户输入,对应的拼音字段的值通过查找前面说到的对
照表由程序自动生成,再添加到数据库。查找时,如果用户输入字母,在数
据库里查找字母字段,如果用户输入中文,在数据库里查找中文字段。所以,
最烦人的是生成每一个汉字的拼音的第一个字母对照表。这个工作不难,但
是很烦,需要由人慢慢做出。当然了,如果你知道Windows的输入法的数据格
式,这个就很简单了,否则的话,只能人工慢慢生成这个对照表了。不过,
我自己估计,应该两三天就应该可以做好了,但还是那个字:烦。Top
5 楼wwxc18(蝸牛小混混)回复于 2002-07-21 20:18:44 得分 0
就用一個if語句不行嗎
Ansitring d;
if (Edit1->Text=="zg")
d="中國";
select....
from....
where ...=dTop
6 楼ouyang75928(Thinking in Pascal)回复于 2002-07-21 20:25:46 得分 0
你可以写入数据表中一一对应,但是你有一个难点,你得从中文中取出拼音这是一个难点。我正在整理这个接口呢?Top
7 楼nzymail(编程浪子)回复于 2002-07-21 20:28:53 得分 0
天哪!!!!这是一个应该问上帝的问题!!!!
也许上帝也没有办法解决多音字的问题!!!!!
痛苦!!!!!Top
8 楼kingcaiyao(aking)回复于 2002-07-21 21:27:45 得分 0
有一种想法,大家可以考虑一下。
首先,正如楼上各位所讲我们在要操作的表中新建一字(当然,如果你已创建了很多关于此表的视图,你可以考虑新建一表与该表对应)来存储拼音码,关于取拼音码:
我们可以这样:
假设我的名字叫"小蔡":
下面的一段程序代码或许可以帮到你:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
unsigned char *s="小蔡";
AnsiString Str("");
int ch1,ch2,ch3,ch4;
ch1=*s;
ch2=*(s+1);
ch3=*(s+2);
ch4=*(s+3);
//将上述全部转换成十六进制:
Str+=IntToHex(ch1,2)+IntToHex(ch2,2)+IntToHex(ch3,2)+IntToHex(ch4,2);
//那么我们最后得到的结果是:Str="D0A1B2CC"
//我们将此码存储到数据表中,然后当用户输入小蔡时,我们就对它进行转换与此码比较看看是否一致。
}
Top
9 楼runnerrunning(千寻失业ing&那是我所不能了解的事)回复于 2002-07-22 09:09:18 得分 0
//我和AKing的源程序:
///.h
String of_Common_GetHZFirstPY(String ss); //得到一个汉字的首拼音字母
String of_Common_GetHZQWM(String ss);//得到汉字的区位码
String of_Common_GetHZNM(String ss);//汉字内码
String of_Common_OutPutFirstPY(String ss);//得到一窜汉字的首拼音字母
//.cpp
String of_Common_GetHZFirstPY(String ss)
{
AnsiString sHEX = of_Common_GetHZNM(ss);
if (sHEX >= "B0A1" && sHEX <= "B0C4" ) return "A";
if (sHEX >= "B0C5" && sHEX <= "B2C0" ) return "B";
if (sHEX >= "B2C1" && sHEX <= "B4ED" ) return "C";
if (sHEX >= "B4EE" && sHEX <= "B6E9" ) return "D";
if (sHEX >= "B6EA" && sHEX <= "B7A1" ) return "E";
if (sHEX >= "B7A2" && sHEX <= "B8C0" ) return "F";
if (sHEX >= "B8C1" && sHEX <= "B9FD" ) return "G";
if (sHEX >= "B9FE" && sHEX <= "BBF6" ) return "H";
if (sHEX >= "BBF7" && sHEX <= "BFA5" ) return "J";
if (sHEX >= "BFA6" && sHEX <= "C0AB" ) return "K";
if (sHEX >= "C0AC" && sHEX <= "C2E7" ) return "L";
if (sHEX >= "C2E8" && sHEX <= "C4C2" ) return "M";
if (sHEX >= "C4C3" && sHEX <= "C5B5" ) return "N";
if (sHEX >= "C5B6" && sHEX <= "C5BD" ) return "O";
if (sHEX >= "C5BE" && sHEX <= "C6D9" ) return "P";
if (sHEX >= "C6DA" && sHEX <= "C8BA" ) return "Q";
if (sHEX >= "C8BB" && sHEX <= "C8F5" ) return "R";
if (sHEX >= "C8F6" && sHEX <= "CBF9" ) return "S";
if (sHEX >= "CBFA" && sHEX <= "CDD9" ) return "T";
if (sHEX >= "CDDA" && sHEX <= "CEF3" ) return "W";
if (sHEX >= "CEF4" && sHEX <= "D188" ) return "X";
if (sHEX >= "D1B9" && sHEX <= "D4D0" ) return "Y";
if (sHEX >= "D4D1" && sHEX <= "D7F9" ) return "Z";
// if (sHEX >= "" && sHEX <= "" ) return "";
return "";
}
//----------------------------------------------------------------------------------------------
String of_Common_GetHZQWM(String ss)
{
unsigned char *s ;
String sReturn = "";
s = ss.c_str();
UINT aa;
String sTemp,sf;
String s2 = "0";
for (int i = 0;i < ss.Length();i++)
{
aa= *(s + i ) - 160;
if (aa < 10)
sTemp = s2 + IntToStr(aa);
else
sTemp = IntToStr(aa);
sf = "";
if (i%2 != 0 && i > 0)
sf = " ";
sReturn = sReturn + sTemp + sf;
}
return sReturn;
}
//-------------------------------------------------
String of_Common_GetHZNM(String ss)
{
unsigned char *s ;
String sReturn = "";
s = ss.c_str();
UINT aa;
String sTemp;
String s2 = "0";
int j;
for (int i = 0;i < ss.Length();i++)
{
aa= *(s + i );
j = aa;
sTemp = IntToHex(j,2);
sReturn = sReturn + sTemp;
}
return sReturn;
}
//-------------------------------------------------
String of_Common_OutPutFirstPY(String ss)
{
int i = 1;
AnsiString s;
AnsiString sReturn;
while(i <= ss.Length())
{
s = ss.SubString(i,2);
if (s.IsLeadByte(1))
{
s = ss.SubString(i,2);
sReturn = sReturn + of_Common_GetHZFirstPY(s);
i = i + 2;
}
else
{
s = ss.SubString(i,1);
sReturn = sReturn + s;
i++;
}
}
return sReturn;
}
Top
10 楼runnerrunning(千寻失业ing&那是我所不能了解的事)回复于 2002-07-22 09:14:57 得分 0
给分吧Top
-
相关文章
2秒记住本站域名
玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的ReadyGo.com.cn
