| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1144 人关注过本帖
标题:(谢谢东海一鱼 )字符串的搜索与截取的困惑
只看楼主 加入收藏
wsz9903011
Rank: 1
等 级:新手上路
帖 子:35
专家分:7
注 册:2009-4-24
结帖率:90.91%
收藏
已结贴  问题点数:20 回复次数:4 
(谢谢东海一鱼 )字符串的搜索与截取的困惑
在缓冲区有这么一段字符串
pid=BC5844B4B3DBF3E193CD8DF26A7D63239A2E29C074E44BFFC15BBD919912C99A5FFD935A95FF6452D4D2EA24B35738C0B4302260EB549FB6BD9D879974FDAECC0090EF82EDE33060717A054DA9F1D3079F0870B92F341A7D1C515D10&jid=/000001.jpg
我想截取这么一段
pid=BC5844B4B3DBF3E193CD8DF26A7D63239A2E29C074E44BFFC15BBD919912C99A5FFD935A95FF6452D4D2EA24B35738C0B4302260EB549FB6BD9D879974FDAECC0090EF82EDE33060717A054DA9F1D3079F0870B92F341A7D1C515D10&jid=/
有什么好的函数能直接实现??如果自己实现 我知道可以用
mov al,"/"
repne scasb
最后可以指向“/”这里 但怎么去除000001.jpg
?? 手动把指向的地址内容填零???大家有什么好的思路??我想听听
还有个问题
比如我连接一个网址 把这个网页的源码 存到缓冲区
........
<input type="hidden" id="titleb0" name="titleb0" value="虎式坦克" />
........
里面有这么一段字  我想截取 虎式坦克 当然不同的书名字不同 所以不能直接以 虎式坦克来匹配 只能先匹配 name="titleb0" value="   那然后怎么 偏移到 虎式坦克 这一段 并截取来呢??

[ 本帖最后由 wsz9903011 于 2009-9-5 17:47 编辑 ]
搜索更多相关主题的帖子: 搜索 困惑 字符 东海一 
2009-09-04 18:13
wsz9903011
Rank: 1
等 级:新手上路
帖 子:35
专家分:7
注 册:2009-4-24
收藏
得分:0 
额 前一半问题已解决 用invoke lstrcpyn,addr szBuffer1,addr szBuffer,length   差不多就解决了 不过还是想听听大家有什么更好的思路  继续等待后一半的高手解答 呵呵
2009-09-04 20:44
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:20 
俺来用C RunTimer试一下。C用惯了。
不过感觉MASM 6以后的语法、语义已经和C的很接近了(感觉不像在写汇编,倒像在用C)。呵呵。
程序代码:
.586
.model flat,stdcall                      ;内存平坦方式,stdcall调用
option casemap:none                      ;大小写敏感

include     windows.inc
include     kernel32.inc
include     msvcrt.inc                   ;C RunTime 定义

includelib     kernel32.lib 
includelib     msvcrt.lib                ;C RunTime 导入

    CTEXT MACRO y:VARARG                 ;字符串宏
        LOCAL sym

    CONST segment dword private 'DATA'
        IFIDNI <y>,<>
            sym db 0
        ELSE
            sym db y,0
        ENDIF
    CONST ends

        EXITM <OFFSET sym>
    ENDM    
    
PlayInfo      proto :DWORD,:DWORD                      ;封装3个功能函数
SwitchLine    proto :DWORD
Suspension    proto

.data
strdemo         db "pid=BC5844B4B3DBF3E193CD8DF26A7D63239A2E29C074E"          ;演示字符串1
                db "44BFFC15BBD919912C99A5FFD935A95FF6452D4D2EA24B3"
                db "5738C0B4302260EB549FB6BD9D879974FDAECC0090EF82E"
                db "DE33060717A054DA9F1D3079F0870B92F341A7D1C515D10"
                db "&jid=/000001.jpg",0
                
strdemo2        db "<input type=",22h,"hidden",22h, "id=",22h,"titleb0",22h    ;演示字符串2
                db "name=",22h,"titleb0",22h,"value=",22h,"虎式坦克",22h," />",0
                
strnewline      db 0dh,0ah,0                                                   ;回车、换行   
                
.data
hInstance       dd ?                                                          
lpBuffer        db 1024 * sizeof(BYTE) dup (?)
                
                
.code
start:
    invoke GetModuleHandle,NULL
    mov hInstance,eax
    
    invoke crt_system,CTEXT("title 字符串处理演示")                 ;修改演示窗口标题
    invoke crt_system,CTEXT("color 3c")                             ;修改背景、前景色
    invoke PlayInfo,CTEXT("____%s____"),CTEXT("利用C RuntimeLibrary 处理字符串演示") ;秀
    invoke SwitchLine,3
    
    invoke crt_memset,offset lpBuffer,0,1024 * sizeof(BYTE)
    
    mov edx,'/'
    invoke crt_strrchr,offset strdemo,edx
    lea ecx,strdemo
    sub eax,ecx                                                      ;offset2 - offset1 
    invoke crt_strncpy,offset lpBuffer,offset strdemo,eax
    
    invoke PlayInfo,CTEXT("原字符串: %s"),offset strdemo    
    invoke SwitchLine,2            
    invoke PlayInfo,CTEXT("字符串切分结果: %s"),offset lpBuffer    
    invoke SwitchLine,4            
    
    invoke crt_memset,offset lpBuffer,0,1024 * sizeof(BYTE)
    
    mov edx,'='
    invoke crt_strrchr,offset strdemo2,edx
    lea ecx,strdemo2
    push eax                                                   ;保存搜索到的偏移
    sub eax,ecx    
    push eax                                                   ;保存搜索到的偏移前长度
    
    invoke crt_strlen,offset strdemo2
    pop edx                                                    ;搜索到的偏移前长度出栈
    sub eax,edx                                                ;原串长度减去搜索到的偏移前长度
    
    dec eax                                                    ;减去一个 '='
    sub eax,3                                                  ;减去 ' />'
                                                   
    pop edx                                                    ;搜索到的偏移出栈  
    inc edx                                                    ;让过 '='
    
    invoke crt_strncpy,offset lpBuffer,edx,eax
    
    invoke PlayInfo,CTEXT("原字符串: %s"),offset strdemo2
    invoke SwitchLine,2
    invoke PlayInfo,CTEXT("字符串提取结果: %s"),offset lpBuffer        
    
    invoke Suspension 
    
    invoke ExitProcess,0
    
SwitchLine proc NullLineNum
    
    mov ecx,NullLineNum
    .while ecx
        push ecx
        invoke PlayInfo,CTEXT("%s"),offset strnewline    ;输出需要数量的空行
        pop ecx
        dec ecx
    .endw
    ret

SwitchLine endp
    
Suspension proc
    
    invoke crt__getch                                          ;暂停
    ret

Suspension endp

PlayInfo proc lpszFormat,lpszText
    
    invoke crt_printf,lpszFormat,lpszText                      ;格式化输出
    ret

PlayInfo endp

end start
收到的鲜花
  • zklhp2009-09-05 12:05 送鲜花  50朵   附言:我很赞同

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-09-05 10:19
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
pid=BC5844B4B3DBF3E193CD8DF26A7D63239A2E29C074E44BFFC15BBD919912C99A5FFD935A95FF6452D4D2EA24B35738C0B4302260EB549FB6BD9D879974FDAECC0090EF82EDE33060717A054DA9F1D3079F0870B92F341A7D1C515D10&jid=/000001.jpg

如果到 .jpg 就结束了直接加 0 截断字符串就成罢
2009-09-05 12:08
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:0 
以下是引用zklhp在2009-9-5 12:08的发言:
pid=BC5844B4B3DBF3E193CD8DF26A7D63239A2E29C074E44BFFC15BBD919912C99A5FFD935A95FF6452D4D2EA24B35738C0B4302260EB549FB6BD9D879974FDAECC0090EF82EDE33060717A054DA9F1D3079F0870B92F341A7D1C515D10&jid=/000001 ...
是啊,不过考虑到后面的处理。我没有用‘截取’,而是用了‘提取’。呵呵。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-09-08 10:27
快速回复:(谢谢东海一鱼 )字符串的搜索与截取的困惑
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017441 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved