最新评论
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 }
Re:如何编写PocketPC上的输入法 lhl 2009-12-20 16:00
本人新开发了一个专门针对智能触屏手机(只有屏幕键盘)而设计的全键盘每字两码字、词、句混合输入的智能输入法。
实现了输入过程中自动分词、全自动调整词频、全自动智能学习新词等智能处理,使得用户可以在手机上实现每字两码整句快速输入,达到行云流水般的盲打境界,输入速度可以与台式计算机相媲美。
据测算,使用本手机输入法,一般人可以轻松达到每分钟50-60字的速度。
目前遇到了几个问题请教博主有没有好方法:
1、在某些软件下不能实现直接点选候选窗上屏。因为编码窗、候选窗是另外一个窗口(不是sip窗口)。程序是这样处理的,点选候选窗(或编码窗)后,自动将候选窗中隐藏,使应用程序重新获取焦点。输出汉字后,重新显示候选窗(编码窗)。在大多数软件是可以正确输入。但是目前在ucweb的搜索框中以及outlook联系人的姓名窗口中不能实现输入。
2、sip面板的宽度目前我已经找到方法设置,在横屏时可以进行自动拉伸。(高度还没有试,我想应该可以实现)。不过拉伸后,面板不美观。我想做一个用户可以自定义面板的功能(面板图片可以由用户自己改变),应该如何实现比较好?
3、另外由于是自己设置面板的位置和大小,需要准确获得wm下面的菜单栏高度,如何获取?(目前是固定是25,这高度可能在不同机器上会变化).
Re:介绍几种苦瓜的吃法,给大家降降火 筱鱼儿 2009-07-08 18:31
我试了,真的很好。快来试试。
re: 双通输入法源码公布 by 尉迟方 半瓶墨水 2009-03-31 09:47
@leo.wan 我也看不懂,我是自己重写的
re: 双通输入法源码公布 by 尉迟方 leo.wan 2009-03-31 08:52
--引用--------------------------------------------------
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;
--------------------------------------------------------
如果看不懂可以找我 我看这个源码有一阵子了 自己改了些 我虽然计算机专业的 但毕业后几年 都没做过编程工作 某天突发奇想想些个输入法可以粤语发音 粤音拼音互换的,最后改到他的词组查询 但又没有好的算法 ,对输入法的知识也不是太了解 还是比较头痛的 ,不过我只是写给自己用 也不太在乎效率
re: 双通输入法源码公布 by 尉迟方 leo.wan 2009-03-31 08:46
其实看看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
re: 如何编写PocketPC上的输入法 ironox 2008-12-09 14:33
这只是实现一个软键盘,跟输入法还有距离
我现在就是困惑如何将SIP生产的汉字字符串发给当前的窗口。
不知道楼上提问的 是不是 都搞定了
@1楼
不明白你什么意思,链接里面都是我自己的作品,只不过没有贴在博客园上
骗贴啊!!!!!!!!!!!!!!!!!!!!!!!
@23楼 自己动手实现一个disabled布满button的窗口就行了,button也可以考虑自己画
参见sogou输入法的快捷输入
我现在要做一个纯粹的软键盘,只要求数字和字母键可用就可以了 .能不能给我提供一个流程,我现在还没有个思路.如果方便,请发邮件zhaojie0328@163.com 谢谢了!
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
这个问题很难回答,需要的基础知识太多,你先学学计算机基础知识,比如汉字是如何表示的等等。
或者,舱室把问题问的更清楚一点
Window mobile汉字输入法汉字如何在应用程序中使用 flyingfish1026 2008-10-09 11:13
怎么在应用程序中使用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加载),我试了很久不能调试。
re: 输入法编程相关资源汇集-欢迎补充 尉迟方 2008-09-01 15:21
那就是编辑框的问题喽,要么是你在往editor里面发送的时候出错了