摘要:题目:编写一个单词逆序输出的算法,例如输入“SEE YOU IN ANOTHER LIFE”,要求输出“LIFE ANOTHER IN YOU SEE”。解答:解法一:只需扫描一遍:#include <iostream> void ReverseWord(const char* src, char* dest){ assert(src != NULL && dest != NULL); const char* head = src; //记住头指针 while(*src++); int count = 0; for(src -= 2;;src--) //从尾到头遍历
阅读全文
摘要:void CUpDownClient::ConnectionEstablished():emule中, CUpDownClient 代表了一个peer。一个peer会被放置到各种队列中去。比如,还未连接的peer被放入到待连接队列中。其它队列中保存的是peer的指针,这样可以节省内存。函数ConnectionEstablished()其意思很明显:连接建立后调用。一个peer连接后,需要做什么呢?1 从connecting队列中删除。2 如果本emule还未获取到自己的公网IP,则通过这个peer获取自己的公网IP。3 更新peer在kad网络中的状态。4 如果正在与这个peer聊天,则更新这
阅读全文
摘要:一个将WM_*消息代码转换为字符串表示的函数:(打表法)#include <windows.h>struct WMArray { UINT Code; char Message[100];} waWMArray[] = { {0x0000, "WM_NULL"},{0x0001, "WM_CREATE"},{0x0002, "WM_DESTROY"},{0x0003, "WM_MOVE"}, {0x0005, "WM_SIZE"},{0x0006, "WM_ACTIVATE
阅读全文
摘要:一个简单的进程封装类,该类允许我们新建一个远程进程,并对其进行控制。进程类CProcess的头文件如下:class CProcess{ public: PROCESS_INFORMATION ProcessInfo; //进程结构信息 STARTUPINFO StartupInfo; //启动信息 bool KillProcess(UINT); //强制杀死进程,不推荐 bool KillThread(UINT); //强制杀死线程,不推荐 bool LoadProcess(char *, char *, char *); //创建远程进程 bool Pause(void); //挂起主线程
阅读全文
摘要:DIV箭头用于表现DIV内容的指向,是使用非常普遍的一种表现形式,例如新浪微博的消息转发: 还有傲游网站的导航条: 像傲游账户上方这种箭头更需要多幅图片以表现箭头和hover的效果。传统的实现方式都需要一副表示箭头的图片放在DIV上方来实现,例如新浪微博的相关CSS如下: 而使用CSS3的特性,我们不需要图片就可以实现更加华丽的效果,这样做的好处还包括减少本地文件系统的读取、节省服务器带宽和连接数、避免文件下载失败带来的错误等等。 实现的原理是:我们可以将箭头看作是一个矩形或者菱形的一个角,使用CSS3的属性transform来实现矩形的旋转。 朝上的箭头需要将矩形旋转45度,我们使用tra.
阅读全文
摘要:一段简单的动态改变数组大小的代码,给初学者看看,详见代码:#include <iostream>class Int_array{ static int no_instances; //数组的实例个数 int size; int len; int *array; //数组指针public: Int_array(int); Int_array(const Int_array&); int &retrieve(int); //索引元素 int no_instance(); void Display(); int length(); void Add(int); void
阅读全文
摘要:##########################################################################ASCE1885的声明:本文源代码归属于:author: Gonzales Ceneliahomepage: www.ai-search.4t.com有增改!##########################################################################本代码实现二分查找的功能,查找前对数组排序使用的是冒泡排序算法。使用的开发环境是Dev C++ 4.9.9.2。程序头文件是bisearch.h,
阅读全文
摘要:使用IOCP的TCP服务器使用过程大体如下:1) 使用CreateIoCompletionPort函数创建完成端口,并以该I/O完成端口为参数创建多个服务线程;2) 创建监听套接字;3) 接收客户端连接请求,返回服务套接字;4) 将服务套接字与完成端口绑定,并在该套接字上投递初始I/O操作请求;5) 返回步骤3);服务线程的流程如下:1) 调用GetQueuedCompletionPort函数等待获取完成信息;2) 根据需要对数据进行处理并投递后续的I/O操作请求;3) 返回步骤1)。程序代码及注释如下:#include <stdio.h>#include <winsock2
阅读全文
摘要:首先当然是先定义头文件Thread.h咯,如下:#ifndef _THREAD_H#define _THREAD_H#ifdef _WIN32#include <windows.h>#else#include <pthread.h>#endif#ifdef _WIN32typedef unsigned threadfunc_t;typedef void* threadparam_t;#define STDPREFIX __stdcall#elsetypedef void* threadfunc_t;typedef void* threadparam_t;#define
阅读全文
摘要:1)STL中的函数random_shuffle()用来对一个元素序列进行重新排序(随机的),函数原型如下:template<class RandomAccessIterator> void random_shuffle( RandomAccessIterator _First, //指向序列首元素的迭代器 RandomAccessIterator _Last //指向序列最后一个元素的下一个位置的迭代器 );template<class RandomAccessIterator, class RandomNumberGenerator> void random_shuf
阅读全文
摘要:1)首先定义互斥对象的接口IMutex(所在文件是IMutex.h)class IMutex //抽象接口{public: virtual ~IMutex() {} virtual void Lock() const = 0; virtual void Unlock() const = 0;};2)接着是实现IMutex接口的实现类Mutex头文件是Mutex.h:#ifndef _WIN32#include <pthread.h>#else#include <windows.h>#endif#include "IMutex.h"class Mute
阅读全文
摘要:研究下托盘程序,或者说:任务栏通知区域(Tray)图标。很多应用程序在系统Shell任务栏通知区域有图标提示。通知区域图标适用于长时间运行但无需用户过多操作,并在有事件发生时可随时根据情况通知用户的应用程序(如即时通信工具、下载工具等)。使用任务通知区域图标的好处如下:1) 窗口程序可以在后台运行,窗口退出,但是程序仍然在运行,减少窗口数量,便于用户操作;2) 窗口最小化后,不占用任务栏的位置,使用户在操作主机时将精力集中在需关注的窗口;3) 在新事件发生时(如新的即时消息、文件下载完成等),可以即时通知到用户;4) 用户通过单击、双击图标、图标菜单等可以很方便地配置应用程序,控制应用程序的运
阅读全文
摘要:1)SCardListReaders函数用来获取系统中在指定读卡器组集合中的读卡器名字列表(去掉重复的)。调用者提供一读卡器组列表,函数返回这些指定组里面的读卡器名字列表;无法标识的组名将被忽略。LONG WINAPI SCardListReaders( __in SCARDCONTEXT hContext, //由SCardEstablishContext()建立的资源管理器上下文,//不能为NULL __in_opt LPCTSTR mszGroups, //读卡器组名,为NULL时表示列出系统中所有读卡器 __out LPTSTR mszReaders, //系统中指定读卡器组中的读卡器
阅读全文
摘要:Windows系统提供了大量的API来方便的进行智能卡应用程序的开发,通过它们我们可以直接控制智能卡读卡器对智能卡进行操作,也可以与智能卡建立直接的虚拟连接而不用考虑智能卡读卡器。智能卡应用程序开发的一般流程是:1)建立连接(使用函数SCardEstablishContext和SCardConnect,SCardReconnect);2)开始事务处理(使用函数SCardBeginTransaction);3)进行事务处理(使用函数SCardTransmit);4)结束事务处理(使用函数SCardEndTransaction);5)断开连接(使用函数SCardDisconnect和SCardRe
阅读全文