posts - 144,  comments - 719,  trackbacks - 2

最新评论

共15页: 1 2 3 4 5 6 7 8 9 下一页 末页 
Re:呵呵,发个面试题 glq2000 2010-06-25 11:06  
自己以前的方法很笨,看了大家的分析后,重写了一遍: 27 char alphabet[26] = {'Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y'}; 29 char column[10] = {0}; 78 //将数字转为用字母表示的列(方法2,此法不错) 79 void ExcelColumn2(unsigned n) 80 { 81 unsigned y=0, i=0; 82 while(n>0) 83 { 84 y = n%26; 85 column[i++] = alphabet[y]; 86 n = n/26 - (!y?1:0); //能整除26时,Z会出现,此时要借位 87 } 88 } 然后再将全局数组column逆置即可。
Re:呵呵,发个面试题 glq2000 2010-06-24 21:31  
刚才那个格式不好, 我重新发一遍 #include <iostream> #include <string> #include <cstring> #include <vector> #include <math.h> using namespace std; vector<char> v; void ExcelColumn(unsigned n) { unsigned y = 0; //余数 unsigned t = 0; char c; //在该位产生的字符 while(n) { y = n%( (unsigned)pow(26, v.size()+1) ); if(!y) // y is 0 { c = 'Z'; n -= 26*((unsigned)pow(26, v.size())); } else // y is not 0 { t = y/( (unsigned)pow(26, v.size()) );//原来是 y%((unsigned)pow(26, v.size())), 现将y后改为/ c = 'A'+t-1; n -= t*((unsigned)pow(26, v.size())); } v.push_back(c); } } int main() { unsigned n = 70308; // CYZD ExcelColumn(n); //逆置该vector vector<char>::iterator it, it2; char tmp; for(it=v.begin(),it2=v.end()-1; it<it2;) //注意:退出条件是it<it2而不是it!=it2,否则v.size()为偶数时,it和it2正好错开,导致循环过头最终导致段错!!! { tmp = *it; *it++ = *it2; *it2-- = tmp; } //输出结果 for(it=v.begin(); it!=v.end(); ++it ) cout<<*it; return 0; }
Re:呵呵,发个面试题 glq2000 2010-06-24 21:29  
关于Excel的我的解法: C++语言: 面试题_转换Excel中的列 01 /* 02 DATE: 2010.6.24 03 04 URL : http://www.cnblogs.com/realfun/archive/2005/04/13/136499.html 05 06 题目: 07 (这个题目不像它表面上看起来那么简单,请仔细想想答案) 08 用过excel的都知道excel的列编号是这样的: 09 a b c .... z aa ab ac .... az ba bb bc .... yz za zb zc .... zz aaa aab aac .... 10 分别代表以下编号: 11 1 2 3 .... 26 27 28 29 .... 52 53 54 55 .... 676 677 678 679 .... 702 703 704 705 .... 12 13 请写个函数,完成从一个正整数到这种字符串之间的转换。 14 =============================================================== 15 这个题目既不是我出的,也不是我遇到的,是我的同学面试的时候遇到的,呵呵,他回来后跟我说,好险,差一点陷进去,陷进去就挂了。 16 */ 17 18 #include <iostream> 19 #include <string> 20 #include <cstring> 21 #include <vector> 22 #include <math.h> 23 using namespace std; 24 25 vector<char> v; 26 27 void ExcelColumn(unsigned n) 28 { 29 unsigned y = 0; //余数 30 unsigned t = 0; 31 char c; //在该位产生的字符 32 while(n) 33 { 34 y = n%( (unsigned)pow(26, v.size()+1) ); 35 if(!y) // y is 0 36 { 37 c = 'Z'; 38 n -= 26*((unsigned)pow(26, v.size())); 39 } 40 else // y is not 0 41 { 42 t = y/( (unsigned)pow(26, v.size()) );//原来是y%((unsigned)pow(26, v.size())), 现将y后的%改为/ 43 c = 'A'+t-1; 44 n -= t*((unsigned)pow(26, v.size())); 45 } 46 v.push_back(c); 47 } 48 } 49 50 51 int main() 52 { 53 unsigned n = 70308; //CYZD 54 ExcelColumn(n); 55 56 //逆置该vector 57 vector<char>::iterator it, it2; 58 char tmp; 59 for(it=v.begin(),it2=v.end()-1; it<it2;) //注意:是it<it2而不是it!=it2,否则v.size()为偶数时, 60 { //it和it2正好错开,导致循环过头最终导致段错!!! 61 tmp = *it; 62 *it++ = *it2; 63 *it2-- = tmp; 64 } 65 66 //输出结果 67 for(it=v.begin(); it!=v.end(); ++it ) 68 cout<<*it; 69 70 cout<<endl; 71 return 0; 72 }
本人新开发了一个专门针对智能触屏手机(只有屏幕键盘)而设计的全键盘每字两码字、词、句混合输入的智能输入法。 实现了输入过程中自动分词、全自动调整词频、全自动智能学习新词等智能处理,使得用户可以在手机上实现每字两码整句快速输入,达到行云流水般的盲打境界,输入速度可以与台式计算机相媲美。 据测算,使用本手机输入法,一般人可以轻松达到每分钟50-60字的速度。 目前遇到了几个问题请教博主有没有好方法: 1、在某些软件下不能实现直接点选候选窗上屏。因为编码窗、候选窗是另外一个窗口(不是sip窗口)。程序是这样处理的,点选候选窗(或编码窗)后,自动将候选窗中隐藏,使应用程序重新获取焦点。输出汉字后,重新显示候选窗(编码窗)。在大多数软件是可以正确输入。但是目前在ucweb的搜索框中以及outlook联系人的姓名窗口中不能实现输入。 2、sip面板的宽度目前我已经找到方法设置,在横屏时可以进行自动拉伸。(高度还没有试,我想应该可以实现)。不过拉伸后,面板不美观。我想做一个用户可以自定义面板的功能(面板图片可以由用户自己改变),应该如何实现比较好? 3、另外由于是自己设置面板的位置和大小,需要准确获得wm下面的菜单栏高度,如何获取?(目前是固定是25,这高度可能在不同机器上会变化).
我试了,真的很好。快来试试。
re: 双通输入法源码公布 by 尉迟方 半瓶墨水 2009-03-31 09:47  
@leo.wan 我也看不懂,我是自己重写的
--引用--------------------------------------------------
bjh: 尉迟方兄,我现在正在学习自由拼音输入法编程,下面的问题一直看不明白,
<br>请指教,非常感谢!
<br>如下两个结构中的dwAttrib和abKey指的是什么意思,如何计算的?
<br>typedef struct _HZPH {
<br> TCHAR szHZ[2*(MAX_PHRASE_LEN+1)];
<br> DWORD dwAttrib;
<br> struct _HZPH __based(lpMapFileBase) *lpNext;
<br>} HZPH, FAR *LPHZPH;
<br>typedef struct _KEYPH {
<br> SHORT wLen;
<br> BYTE abKey[MAX_PHRASE_LEN+1];
<br> HZPH __based(lpMapFileBase) *lpHZPH;
<br> struct _KEYPH __based(lpMapFileBase) *lpNext;
<br>} KEYPH, FAR *LPKEYPH;
--------------------------------------------------------
如果看不懂可以找我 我看这个源码有一阵子了 自己改了些 我虽然计算机专业的 但毕业后几年 都没做过编程工作 某天突发奇想想些个输入法可以粤语发音 粤音拼音互换的,最后改到他的词组查询 但又没有好的算法 ,对输入法的知识也不是太了解 还是比较头痛的 ,不过我只是写给自己用 也不太在乎效率
其实看看tool目录下的源码就很清楚这些结构是用来干什么的了
很有意思,dvoraksip安装在手机上,调不出来,不是注册表的问题。
有一个办法,先安装一个touchpal输入法,再安装dvoraksip,重起后把touchpal删除,dvoraksip就可以用了。
输入法的窗口大小如何改变?
我用的是微软的例子dvoraksip,它默认的是80*240,我想改为100*240,试了下面的定义,好像不起作用。
#define BITMAP_HEIGHT 100
#define BITMAP_WIDTH 240
不知在哪里定义?
re: 如何编写PocketPC上的输入法 jason2009 2009-03-17 09:47  
--引用--------------------------------------------------
simon金: 断点肯定是没有问题的,我在DllMain里和Select中都设置了。 SIP也被加载了,点击了我的SIP输入法之后,能够弹出我的SIP输入法。
SIP是被device.exe加载。IMM被每个应用独立加载(所以好调试)。
你试过例子代码没?
C:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Samples\CPP\ATL\Dvoraksip
这个应用也不能调试。

下面是我的注册表设置:
HKEY_CURRENT_USER\CLSID\ {4a4a96d7-ae04-11d0-a4f8-00aa00a749b9}
CESip

HKEY_CURRENT_USER\CLSID\ {4a4a96d7-ae04-11d0-a4f8-00aa00a749b9}\ InprocServer32
\Windows\CeSip.dll

HKEY_CURRENT_USER\CLSID\ {4a4a96d7-ae04-11d0-a4f8-00aa00a749b9}\ IsSIPInputMethod
1


请具体说明下你是怎么能调试的,我现在只能通过DEBUGMSG,然后通过串口打印出信息。

谢谢!!
--------------------------------------------------------

遇到和楼上一样的情况,不知道能否请半瓶墨水兄详细指导一下,不胜感激!
re: 如何编写PocketPC上的输入法 半瓶墨水 2009-03-10 19:35  
输入法自己是有callback的,自己去查
如果是说SIP,我就不知道了
re: 如何编写PocketPC上的输入法 jason2009 2009-03-10 19:01  
你好,又来请教了,^_^。

请问下,如果是一个带有全键盘的PPC,我在实现输入法的时候,如何获取到键盘消息呢?

是向当前应用注册钩子,截取WH_KEYBOARD_LL钩子消息码?

如果有类似的代码资料,请告知下,感谢。
请教个问题,如果我在带全键盘的PPC上开发SIP,该如何获取键盘消息?和smartphone一样的吗?谢谢
想请问个问题,现在想做一个可更换皮肤的SIP,想把所有的图片资源都放在一个DLL里面,由SIP所在的DLL来调用资源DLL,这样以后更换皮肤就可通过更换资源DLL搞定。不知道wince上的dll调用与pc上的dll互相调用是否一样呢?可否传授下经验,感谢
re: 如何编写PocketPC上的输入法 jason2009 2009-02-20 11:21  
--引用--------------------------------------------------
尉迟方: 搜一下RegisterCallback:

1.
HRESULT IInputMethod::RegisterCallback( IIMCallback* pIMCallback );
其中有个Callback,是SIP driver给你SIP的一个参数

2.
用这个Callback,强制转型为IIMCallback2,然后调用SetImInfo就可以了。
HRESULT SetImInfo( IMINFO* pimi );

--------------------------------------------------------

按照你的方法,在ReceiveSipInfo方法中,将IIMCallback转型为IIMCallback2,然后调用SetImInfo,但是,发现IIMCallback是NULL,请问下,是不是调用的位置不对?谢谢了
dll调试方法,搜一下吧,这里有个链接:
http://msdn.microsoft.com/zh-cn/library/c91k1xcf(VS.80).aspx
我觉得这种问题自己去搜索来得更快一些
pc上是attach process选中加载dll的程序进程就可以调试了,现在还不知道如何attach process选择ppc上的进程,请指点下,非常感谢。
@jason2009
还是自己看看dll调试的书,可以参考桌面上的
同样是设断点没什么难的
ppc的输入法是dll,不太清楚如何用visual studio 来调试远程DLL,能否抽空写个比较详细的调试方法,初学,多多见谅,感谢!
re: 如何编写PocketPC上的输入法 尉迟方 2009-02-12 17:31  
我的email在新的blog上有
http://www.2maomao.com/blog/contact/

至于SIP,生成新窗口还是放在一起,是可以自己决定的
re: 如何编写PocketPC上的输入法 jason2009 2009-02-12 17:27  
@尉迟方
感谢你的回复。问题已经解决。

现在是想在PPC上实现输入法,但是看到资料上写,只能同时由一个SIP窗口,如果我要实现SIP,以及候选词列表这些,是不是需要把他虚拟键盘与候选词列表都放在同一个window上?

能告知下email吗?非常想和你多交流交流
re: 如何编写PocketPC上的输入法 尉迟方 2009-02-06 13:01  
@jason2009
网上搜搜吧,相应书籍上也有
re: 如何编写PocketPC上的输入法 jason2009 2009-02-06 11:30  
PPC新手,哪位老师能讲讲,如何具体替换掉系统原来的SIP?比如,生成NewSIP.dll放在哪里?注册表如何修改?等。非常感谢。
re: 如何编写PocketPC上的输入法 半瓶墨水 2008-12-09 17:35  
@IRONOX
使用PostKeybdMessage或者用VK_PACKET消息
参见:http://www.2maomao.com/blog/how-to-send-uchar-to-hwnd/
re: 如何编写PocketPC上的输入法 ironox 2008-12-09 14:33  
这只是实现一个软键盘,跟输入法还有距离

我现在就是困惑如何将SIP生产的汉字字符串发给当前的窗口。
不知道楼上提问的 是不是 都搞定了
@1楼
不明白你什么意思,链接里面都是我自己的作品,只不过没有贴在博客园上
骗贴啊!!!!!!!!!!!!!!!!!!!!!!!
@23楼 自己动手实现一个disabled布满button的窗口就行了,button也可以考虑自己画
参见sogou输入法的快捷输入
我现在要做一个纯粹的软键盘,只要求数字和字母键可用就可以了 .能不能给我提供一个流程,我现在还没有个思路.如果方便,请发邮件zhaojie0328@163.com 谢谢了!
@21楼 能详细描述一下吗?
我的键盘右边光出字母上面的数字咋弄啊
re: 如何编写PocketPC上的输入法 尉迟方 2008-10-09 16:59  
在wince下要做响应输入法输入的自定义control,最好是基于标准edit来做
否则要做很多琐碎的工作
re: 如何编写PocketPC上的输入法 flyingfish1026 2008-10-09 16:40  
我们的另一个平台的产品,不是wince下的,只要调用os提供的api,定义一个callback function就可以拿到系统输入法的汉字串了,如下,
mmi_gis_adp_enter_input_screen(WCPTxtInputCb, m_szImeTxt,
MiGO_INPUT_TYPE_NUMBER, m_u4TxtMaxLen);不知道window mobile怎么拿
re: 如何编写PocketPC上的输入法 flyingfish1026 2008-10-09 16:33  
editor用的是我们产品自己的control,主程序下面封装了平台无关层,没有用wince的window来搭UI。所以那个有光标的editor响应不到IME输入的内容。可有什么方法能通过主程序来到输入的汉字。
re: 如何编写PocketPC上的输入法 尉迟方 2008-10-09 16:17  
只要有个editor就可以啊,输入的内容会发给editor的,不用多余的工作
re: 如何编写PocketPC上的输入法 flyingfish1026 2008-10-09 16:10  
谢谢版主。这个问题是这样的,我们正在做一个Window mobile下面的应用程序,输入法需要应用window mobile自带的系统输入法。现在用SipShowIM(SIPF_ON)能呼出系统的软键盘,在IME产生的汉字我们的应用程序如何能拿到,是通过消息还是callback?查看msdn IME有很多相关的消息和函数,不知道怎么下手,望指教。
re: 如何编写PocketPC上的输入法 尉迟方 2008-10-09 14:31  
@FlyingFish1026
这个问题很难回答,需要的基础知识太多,你先学学计算机基础知识,比如汉字是如何表示的等等。
或者,舱室把问题问的更清楚一点
怎么在应用程序中使用wndows mobile系统输入法产生的汉字,谢谢。
re: 今日网站被封 丁学 2008-09-16 18:37  
@尉迟方
呵呵,被墙的实在太多,还是努努力力老老实实过日子的好
re: 今日网站被封 尉迟方 2008-09-16 07:52  
@丁学
逻辑学的不错
不过
调侃而已
re: 今日网站被封 丁学 2008-09-16 07:04  
被墙过的,也不一定是好网站
re: 如何编写PocketPC上的输入法 尉迟方 2008-09-08 09:26  
哦,我跟你开发用的不是一个工具,我用的是PB。。。
re: 如何编写PocketPC上的输入法 simon金 2008-09-07 23:28  
断点肯定是没有问题的,我在DllMain里和Select中都设置了。 SIP也被加载了,点击了我的SIP输入法之后,能够弹出我的SIP输入法。
SIP是被device.exe加载。IMM被每个应用独立加载(所以好调试)。
你试过例子代码没?
C:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Samples\CPP\ATL\Dvoraksip
这个应用也不能调试。

下面是我的注册表设置:
HKEY_CURRENT_USER\CLSID\ {4a4a96d7-ae04-11d0-a4f8-00aa00a749b9}
CESip

HKEY_CURRENT_USER\CLSID\ {4a4a96d7-ae04-11d0-a4f8-00aa00a749b9}\ InprocServer32
\Windows\CeSip.dll

HKEY_CURRENT_USER\CLSID\ {4a4a96d7-ae04-11d0-a4f8-00aa00a749b9}\ IsSIPInputMethod
1


请具体说明下你是怎么能调试的,我现在只能通过DEBUGMSG,然后通过串口打印出信息。

谢谢!!
re: 如何编写PocketPC上的输入法 尉迟方 2008-09-07 21:57  
是不是断点设置的不对?抑或你的SIP没有被正确加载?
re: 如何编写PocketPC上的输入法 simon金 2008-09-07 21:55  
我跳过IMM是可以调试的,但是SIP,我这边实在调试不了。你是怎么设置的?
re: 如何编写PocketPC上的输入法 尉迟方 2008-09-02 18:17  
一样的,只要连上了,设置好断点,就能调试。
re: 如何编写PocketPC上的输入法 simon金 2008-09-02 15:52  
不知如何调试Pocket PC上的SIP输入法(SIP被DEvice.exe加载),我试了很久不能调试。
那就是编辑框的问题喽,要么是你在往editor里面发送的时候出错了
共15页: 1 2 3 4 5 6 7 8 9 下一页 末页