gpt4 book ai didi

assembly - 如何删除字符串中的所有标点符号和空格?

转载 作者:行者123 更新时间:2023-12-02 19:15:24 25 4
gpt4 key购买 nike

我有这样的输入:

This is, ,,, *&% a ::; demo + String. +Need to**@!/// format:::::!!! this.`

所需输出:

ThisisademoStringNeedtoformatthis

我必须使用str_trim来完成此操作。

编辑:我正在编写一个加密程序。在加密之前,我必须删除字符串中的所有标点符号并将所有小写字母转换为大写。

我添加了代码。在将其转为大写之前,我需要删除空格或任何标点符号。到目前为止,除了我们不允许使用的 str_trim 之外,我还没有在书中找到任何可以帮助解决此问题的内容。

INCLUDE Irvine32.inc

.data
source byte "This is the source string",0

.code
main proc


mov esi,0 ; index register
mov ecx,SIZEOF source ; loop counter
L1:
mov al,source[esi] ; get a character from source
and source[esi], 11011111b ; convert lower case to upper case
inc esi ; move to next character
loop L1 ; repeat for entire string

mov edx, OFFSET source
call WriteString

exit
main endp
end main

最佳答案

您已经在尝试从小写更改为大写,因此,我将帮助您删除标点符号。下一个代码使用我的建议:将大写字母移动到辅助字符串,忽略标点符号。我使用EMU8086编译器:

.stack 100h
.data
source db "STRING, WITH. PUNCTUATION : AND * SPACES!$"
aux db " "
.code
mov ax, @data
mov ds, ax

;REMOVE EVERYTHING BUT UPPERCASE LETTERS.

mov si, offset source ; POINT TO STRING.
mov di, offset aux ; POINT TO AUXILIARY.
L1:
mov al, [ si ] ; get character from source
;CHECK IF END STRING ($).
cmp al, '$'
je finale
;CHECK IF CHAR IS UPPERCASE LETTER.
cmp al, 65
jb is_not_a_letter ; CHAR IS LOWER THAN 'A'.
cmp al, 90
ja is_not_a_letter ; CHAR IS HIGHER THAN 'Z'.
;COPY LETTER TO AUX STRING.
mov [ di ], al
inc di ; POSITION FOR NEXT CHARACTER.
is_not_a_letter:
inc si ; move to next character
jmp L1

finale:
mov [ di ], al ; '$', NECESSARY TO PRINT.

;PRINT STRING.
mov dx, OFFSET aux
mov ah, 9
int 21h

;END PROGRAM.
mov ax, 4c00h
int 21h

我以“$”结束字符串,因为我用 int 21h 打印字符串。

如您所见,我没有使用 CX 也没有使用 LOOP 指令。我所做的就是重复直到找到“$”。您可以执行相同的操作,直到找到 0。

关于assembly - 如何删除字符串中的所有标点符号和空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36721559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com