2016-05-04 8 views
-3

Ich muss eine bestimmte Anzahl von Zeichen (sagen wir 3) vom Ende eines Strings entfernen. Für diesen speziellen String funktioniert es, wenn ich 'Z' finde, und dann zeige ich es auf W by sub edi, 3, und speichere dann den Rest der Zeichenkette mit Nullen.Wie entferne ich eine bestimmte Anzahl von Zeichen am Ende einer Zeichenkette?

INCLUDE Irvine32.inc 

.data 
source BYTE "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 0 

.code 
main PROC 

mov edi, OFFSET source 
mov al, 'Z'     ; search for Z 
mov ecx, LENGTHOF source 
cld 
repne scasb  ; repeat while not equal 
sub edi, 3   ; now points to W 

mov al, 0   
rep stosb  ; stores all characters after W with 0. 

mov edx, OFFSET source 
call WriteString 
call CrlF 

exit 
main ENDP 
end main 

Ich mag jedoch mit verschiedenen Saiten diesen Code machen heißt, wenn die Quelle durch den Benutzer geändert wird, etwas, was anders zu sagen (E.g.source Byte „Dies ist ein String“, 0). Zu diesem Zweck habe ich versucht, 0 (das Ende der Zeichenfolge) zu finden, wie mein Code unten zeigt. Aber es funktioniert nicht, Es gibt nur die ganze Zeichenfolge aus.

Was muss ich tun, um sicherzustellen, dass der Code auch dann noch funktioniert, wenn die Zeichenfolge geändert wird, ohne dass jedes Mal die Suche nach dem Ende der Zeichenfolge geändert werden muss?

INCLUDE Irvine32.inc 

.data 
source BYTE "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 0 

.code 
main PROC 

mov edi, OFFSET source 
mov al, '0'     ; search for end of string 
mov ecx, LENGTHOF source 
cld 
repne scasb  ; repeat while not equal 
sub edi, 3   ; now points to W ?? 

mov al, 0   
rep stosb  ; stores all characters after W with 0. 

mov edx, OFFSET source 
call WriteString 
call CrlF 

exit 
main ENDP 
end main 
+2

Versuchen Sie, die Antwort auf Ihre vorherige Frage zu verwenden. Wenn Sie ein Problem haben, schreiben Sie Ihren Code, um zu sehen, was das Problem sein könnte (komm, du kannst es tun). –

+0

Mögliches Duplikat von [Wie entferne ich alles nach einem bestimmten Zeichen in einer Zeichenfolge?] (Http://stackoverflow.com/questions/37036950/how-do-i-remove-everything-after-a-certain-character-) in-a-string) –

+0

Wenn Sie die gleiche Frage zweimal stellen, bekommen Sie keine andere Antwort. –

Antwort

0

Ich denke, Sie müssen wiederholen Zeichenfolge Zeichenfolge Byte verwenden. Ich habe das von einer anderen Website bekommen. In Ihrem Fall würden Sie die Länge Ihrer Zeichenfolge - 10 in cx verschieben.

mov  ax,@data 
mov  ds,ax  ;initialize ds 
mov  es,ax  ;and es 
lea  si,[str1] ;si points to source string 
lea  di,[str2] ;di points to dest string 
cld    ;set df=0 (increasing) 
mov  cx,5  ;# of chars in string1 
rep movsb   ;copy the string 
+0

Ich möchte die Zeichen aus einer Zeichenfolge löschen, ohne sie in eine andere zu kopieren. Danke für deine Antwort. Schätzen Ihre Bemühungen. :) – kc9552

Verwandte Themen