C++写一个类,实现汉字转换为拼音首写的功能

panhanquan 2008-02-27 11:32:22
不用map
要用到数组.
用ASCII来判断
class pinyin
{public:
void getPinyin(char* , const char *);//只能用一个public函数
...};
int main()
{
pinyin py;
char str[100];
py.getPinyin (str,"Ca集团");
printf("%s",str);
}
执行结果为:CAJT
如何完成呢 ?
...全文
293 16 打赏 收藏 举报
写回复
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
星光伴月 2008-02-29
  • 打赏
  • 举报
回复
15楼:没有看明白你的意思,我怎么想不出来这与主楼的话题怎么联系起来呢?
panhanquan 2008-02-29
  • 打赏
  • 举报
回复
多谢星光伴月

一种用<map>

一种用到数组和文件流{
char buffer[512];
fstream file("yeting.txt", ios::in);
while (!file.eof()) {
file >> buffer;
cout << buffer << endl;
}
file.close();

return 0;
}
一种用到数组和文件流

use open() and readline() function


另外一种吧GB码写入数组


请问有没有人能写出这三种方法的时间复杂度?
windever 2008-02-28
  • 打赏
  • 举报
回复
......文字库自己做确实不太现实~
文件流的判定应该会有出入吧~看上去不太稳定的样子
星光伴月 2008-02-27
  • 打赏
  • 举报
回复
你想怎么实现,具体地说一下你想使用的方法,或列出代码来看看.
panhanquan 2008-02-27
  • 打赏
  • 举报
回复
我有一个.txt文件。列出了所有的映射。嫩用文件流的方法实现么?
星光伴月 2008-02-27
  • 打赏
  • 举报
回复
那你是收的不完整.再发给你一次吧.这次刚刚改成了一个类,不过不太符合你的要求,你还得自己改一下.
panhanquan 2008-02-27
  • 打赏
  • 举报
回复
100},//这里是不是接着还有内容的么?
星光伴月 2008-02-27
  • 打赏
  • 举报
回复
有问题吗?
panhanquan 2008-02-27
  • 打赏
  • 举报
回复
.h文件都完整了么?
星光伴月 2008-02-27
  • 打赏
  • 举报
回复
按照你的要求将这个代码重新封装成你所需要的C++类,就可以像你的main()函数中那样调用了.
panhanquan 2008-02-27
  • 打赏
  • 举报
回复
要封装为一个类。main()函数要和我的要求一样行么?

发到邮箱行么?flywithoutheart@163.com

在线等待
星光伴月 2008-02-27
  • 打赏
  • 举报
回复
.H文件:

#ifndef ASKPY_H
#define ASKPY_H

char GetFirstLetter(const char *HzChar);
char *GetFirstLetters(const char *HzString);

static const unsigned char FirstLetterIndex[126][191] = { /* GBK汉字拼音首字母ASCII码表 */
{121,115,120,109,109, 99,115,100,113,108,121, 98,106,106,106,107, 99,122,104,106,
102,121,121,119,106,104,122,104,115,121,121,103,106,104,104,100,115,110,107,107,
116,109,111, 99,120,121,112,115,110,113,115,101, 99, 99,122,103,103,108,108,121,
106,109,122, 0,121,115,115,103,121,122,121,100,121,120,106,121,121,122,108,100,
119,106,114,119, 98, 98,102,116,101,120,122,104,104, 98, 99,122,115,114,102,109,
113,119,121,102, 99,119,100,122,112,121,100,100,119,121,120,106, 97,121,112,115,
102,116,122,121,106,120,120,120,122,120,110,110,120,120,122,122, 98,112,121,115,
121,122,104,109,122, 98,113, 98,122, 99,121,122, 98,120,113,115, 98,104,104,120,
103,102,109, 98,104,104,103,113, 99,120,115,116,104,108,121,103,121,109,120, 97,
108,101,108, 99, 99,120,122,114,106,115,100},
....

.CPP文件:

char GetFirstLetter(const char *HzChar)
{
/* 该函数基于GBK汉字拼音首字母表 */
unsigned char Letter;
int len=strlen(HzChar);
if(len!=2) return ' ';
Letter=FirstLetterIndex[(unsigned char)HzChar[0]-129][(unsigned char)HzChar[1]-64];
if(Letter==0) Letter=' ';
return Letter;
}

char *GetFirstLetters(const char *HzString)
{
/* 该函数基于GBK汉字拼音首字母表 */
static char strret[1024];
char hz[3];
int i=0;
int k=0;
int len=strlen(HzString);
memset(strret,0,sizeof(strret));
while(i<len)
{
memset(hz,0,sizeof(hz));
if((unsigned char)HzString[i]>128)
{
hz[0]=HzString[i++];
hz[1]=HzString[i++];
strret[k++]=GetFirstLetter(hz);
}
else
{
strret[k++]=HzString[i++];
}
}
return strret;
}

以上代码稍做整理即可以做成一个类.
由于代码表太大,这儿打不开.
星光伴月 2008-02-27
  • 打赏
  • 举报
回复
用操作系统的拼音输入法的相关工具生成一个汉字首字母表,然后用查表的方式可以实现.
effective_person 2008-02-27
  • 打赏
  • 举报
回复
好像挺难的!
我在网上看到一个帖子和这相似.
http://topic.csdn.net/t/20010711/12/189922.html
taodm 2008-02-27
  • 打赏
  • 举报
回复
map和数组于此没有区别的。
关键是汉字和其拼音的对应库。
常用汉字几千个呢,自己写根本不现实。
szesin 2008-02-27
  • 打赏
  • 举报
回复
网上应该有比较多的现成代码或者库的

可以查一查
一定要自己实现?
发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-02-27 11:32
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下