请教这道题怎么写,困扰好久了,希望能有比较详细的注释
查找字母“s”在字符串string中第一次出现的位置,找到后替换为大写的S。假设string字符串为:“a string for testing.”。 本帖最后由 arnomiller 于 2019-5-12 16:20 编辑方法一:切片法
str1="a string for testing"
a=str1.find("s") #查找s在字符串中第一次出现的位置find可以用index代替
str1=str1[:a]+"S"+str1 #使用切片的方式对原字符串进行更改
方法二:替换法
str1="a string for testing"
str1=str1.replace("s","S",1)
https://fishc.com.cn/forum.php?mod=viewthread&tid=38992&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403
.find()、.index( )以及.replace( )的说明 本帖最后由 jackz007 于 2019-5-21 17:34 编辑
stack segment para stack
dw 80h dup(0)
stack ends
data segment para 'data'
d1 db0dh , 0ah ,'a string for testing.' , 0dh , 0ah , ' , 00
d2 equ $ - d1
data ends
code segment 'code'
assume cs:code , ds:data , ss:stack
main proc far
mov ax,data
mov ds,ax
mov es,ax
mov al,'s' ; 准备使用 scasb 指令从 es:di 开始搜索字符 's'
mov cx,d2 ; d2 = 整个目标字符串的长度
mov di,offset d1 ; di 指向目标字符串
cld ; 搜索方向为从前向后
repne scasb ; 搜索过程持续到找到为止
jnz m1 ; 如果最终没有找到就跳走
sub byte ptr es:,' ' ; es:指向找到的字符,把它变成大写
m1: mov dx,offset d1 ; 让 ds:dx 指向目标字符串
mov ah,09h ; 准备用 ah = 09h 的DOS中断显示目标字符串
int 21h ; DOS 中断调用
mov ax,4c00h ; 准备退出程序
int 21h ; DOS 中断调用
main endp
code ends
end main arnomiller 发表于 2019-5-12 16:01
方法一:切片法
str1="a string for testing"
a=str1.find("s") #查找s在字符串中第一次 ...
这个还没学{:10_266:},不过非常感谢{:10_254:} 本帖最后由 MengGod酷李 于 2019-5-21 16:16 编辑
jackz007 发表于 2019-5-12 16:35
file:///C:/Users/admin/Pictures/change.png为啥会有后面的东西
本帖最后由 jackz007 于 2019-5-22 16:05 编辑
MengGod酷李 发表于 2019-5-21 16:13
file:///C:/Users/admin/Pictures/change.png为啥会有后面的东西
其实字符串定义本来是这样的,贴成代码后内容被偷偷 “贪污” 掉了
d1 db0dh , 0ah , 'a string for testing.' , 0dh , 0ah , '$' , 00
没错,就是这个 '$' 字符,int 21h,ah = 09h 功能调用显示字符串所要求字符串末尾的结束标志。
楼主得用这次新贴出的替换掉原来的代码。
页:
[1]