Programming 版 (精华区)

发信人: SwordLea (飞刀李), 信区: Programming
标  题: [程序大战]20040720
发信站: 哈工大紫丁香 (Tue Jul 20 10:17:15 2004), 转信

程序目标:
    在指定任意长度二进制文件中,查找指定最小长度(最大长度128)的连续可显示字符
——即>=32 && <= 126,并将其组织为字符串,需要记录各字符串信息如下:
    DWORD dwID;     // 该字符串出现序号(由0开始)
    DWORD dwOffset; // 在文件中偏移
    short nLength;  // 该字符串长度
    char* lpString; // 该字符串内容

    将最终结果输出到CRichEditCtrl控件中,格式如下:
    %u: Offset:%u   Length:%d\t%s
    dwID dwOffset   nLength    lpString

计时方法:
    以下提供两个计时器类,都可以达到10毫秒级精确度,建议使用CLocalCalculagraph,
该类可以避免进程切换导致计时误差。
    
// 系统计时器
class CSystemCalculagraph       
{
public:
        void Start()
        {
                dwStart = GetTickCount();
        }
        void Stop()
        {
                dwEnd = GetTickCount();
        }
        DWORD GetElapsedTime()
        {
                return dwEnd - dwStart + 1; // 防止结果为零
        }
private:
        DWORD dwStart, dwEnd;
};

// 进程计时器
class CLocalCalculagraph        
{
public:
        void Start()
        {
                start = clock();
        }
        void Stop()
        {
                end = clock();
        }
        DWORD GetElapsedTime()
        {
                return end - start + 1; // 防止结果为零
        }
private:
        clock_t start, end;
};

示    例:
    CRichEditCtrl *pRiched = &m_ctrlRichEd;
    CLocalCalculagraph cc;
    CFile f;
    if (!f.Open("MinGWStudioFullSetupPlus-2.02.exe",CFile::modeRead)) return;
    DWORD dwSize = f.GetLength();
    LPBYTE pBuffer = new BYTE[dwSize + 1];
    f.Read(pBuffer ,dwSize );
    f.Close();

    CString sFilterResult;
    cc.Start();
    StrFilter(pBuffer , 5, sFilterResult);
    ~~~~~~~~~ 这个函数是需要实现的,该格式仅为示例!
    pRiched->SetWindowText(sFilterResult);
    cc.Stop();
    delete pBuffer ;

    // 以下是用于评测的结果
    printf("Used time:%lu\n", cc.GetElapsedTime());

测试数据:
    二进制文件: MinGWStudioFullSetupPlus-2.02.exe 62073445 字节, Nov__7__2003
               下载位置:202.118.239.46/Incoming/Other/BTC/tools/
    最小长度  : 5

其它说明:
    计时从字符串过滤开始,到结果输出为止,不包括文件读取时间,也不包括向
                                          *****               *******
RichEditCtrl控件输出时间。

    请同学们综合考虑各方面因素,开拓思路,一试身手。
--
    I came, I saw, I conquered ! — Caesar


※ 修改:·SwordLea 于 Jul 21 09:08:43 修改本文·[FROM: 202.118.246.241]
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.246.241]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.219毫秒