【问题标题】:How do I remove everything after a certain character in a string?如何删除字符串中某个字符后的所有内容?
【发布时间】:2016-05-04 19:59:02
【问题描述】:

如何删除字符串中“?”之后的所有内容?到目前为止,我的代码搜索“?”。我该如何从那里着手?

这是我的代码。

INCLUDE Irvine32.inc

.data
source BYTE "Is this a string? Enter y for yes, and n for no",0

.code
main PROC

mov edi, OFFSET source
mov al, '?'                  ; search for ?
mov ecx, LENGTHOF source
cld
repne scasb       ; repeat while not equal
jnz quit
dec edi           ; edi points to ?

end main

【问题讨论】:

    标签: assembly x86 masm masm32 irvine32


    【解决方案1】:

    您可以替换“?”之后的所有内容由零,所以“?”之后的所有字符已被“删除”:

    INCLUDE Irvine32.inc
    
    .data
    source BYTE "Is this a string? Enter y for yes, and n for no",0
    
    .code
    main PROC
    
    mov edi, OFFSET source
    mov al, '?'                  ; search for ?
    mov ecx, LENGTHOF source
    cld
    repne scasb       ; repeat while not equal
    jnz quit
    dec edi           ; edi points to ?
    
    ;REPLACE ALL CHARACTERS BY "AL" (ZERO) STARTING WHERE "EDI" WAS AND
    ;FINISH WHEN "ECX" == 0.
    mov al, 0         ;<=====================================
    repne stosb       ;<=====================================
    
    end main
    

    请注意我们是如何使用 EDI 和 ECX 搜索“?”后的值的。

    【讨论】:

    • 如果问题是关于如何替换 "?" 之后的所有内容,那么 dec edi 指令将覆盖 "?"。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 2018-04-03
    • 2018-11-15
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    相关资源
    最近更新 更多