鱼C论坛

 找回密码
 立即注册
查看: 3114|回复: 5

[已解决]请教这道题怎么写,困扰好久了,希望能有比较详细的注释

[复制链接]
发表于 2019-5-12 15:42:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
查找字母“s”在字符串string中第一次出现的位置,找到后替换为大写的S。假设string字符串为:“a string for testing.”。
最佳答案
2019-5-12 16:35:27
本帖最后由 jackz007 于 2019-5-21 17:34 编辑
  1. stack segment para stack
  2.             dw 80h dup(0)
  3. stack ends
  4. data segment para 'data'
  5.     d1   db  0dh , 0ah ,'a string for testing.' , 0dh , 0ah , ' , 00
  6.     d2   equ $ - d1
  7. data ends
  8. code segment 'code'
  9.     assume cs:code , ds:data , ss:stack
  10.     main proc far
  11.             mov ax,data
  12.             mov ds,ax
  13.             mov es,ax
  14.             mov al,'s'                 ; 准备使用 scasb 指令从 es:di 开始搜索字符 's'
  15.             mov cx,d2                  ; d2 = 整个目标字符串的长度
  16.             mov di,offset d1           ; di 指向目标字符串
  17.             cld                        ; 搜索方向为从前向后
  18.             repne scasb                ; 搜索过程持续到找到为止
  19.             jnz m1                     ; 如果最终没有找到就跳走
  20.             sub byte ptr es:[di-1],' ' ; es:[di - 1]指向找到的字符,把它变成大写
  21.     m1:     mov dx,offset d1           ; 让 ds:dx 指向目标字符串
  22.             mov ah,09h                 ; 准备用 ah = 09h 的DOS中断显示目标字符串
  23.             int 21h                    ; DOS 中断调用
  24.             mov ax,4c00h               ; 准备退出程序
  25.             int 21h                    ; DOS 中断调用
  26.     main endp
  27. code ends
  28.     end main
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-5-12 16:01:32 | 显示全部楼层
本帖最后由 arnomiller 于 2019-5-12 16:20 编辑

方法一:切片法
str1="a string for testing"
a=str1.find("s")                 #查找s在字符串中第一次出现的位置find可以用index代替
str1=str1[:a]+"S"+str1[a+1:] #使用切片的方式对原字符串进行更改
方法二:替换法
str1="a string for testing"
str1=str1.replace("s","S",1)



https://fishc.com.cn/forum.php?m ... peid%26typeid%3D403
.find()、.index( )以及.replace( )的说明
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-12 16:35:27 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-5-21 17:34 编辑
  1. stack segment para stack
  2.             dw 80h dup(0)
  3. stack ends
  4. data segment para 'data'
  5.     d1   db  0dh , 0ah ,'a string for testing.' , 0dh , 0ah , ' , 00
  6.     d2   equ $ - d1
  7. data ends
  8. code segment 'code'
  9.     assume cs:code , ds:data , ss:stack
  10.     main proc far
  11.             mov ax,data
  12.             mov ds,ax
  13.             mov es,ax
  14.             mov al,'s'                 ; 准备使用 scasb 指令从 es:di 开始搜索字符 's'
  15.             mov cx,d2                  ; d2 = 整个目标字符串的长度
  16.             mov di,offset d1           ; di 指向目标字符串
  17.             cld                        ; 搜索方向为从前向后
  18.             repne scasb                ; 搜索过程持续到找到为止
  19.             jnz m1                     ; 如果最终没有找到就跳走
  20.             sub byte ptr es:[di-1],' ' ; es:[di - 1]指向找到的字符,把它变成大写
  21.     m1:     mov dx,offset d1           ; 让 ds:dx 指向目标字符串
  22.             mov ah,09h                 ; 准备用 ah = 09h 的DOS中断显示目标字符串
  23.             int 21h                    ; DOS 中断调用
  24.             mov ax,4c00h               ; 准备退出程序
  25.             int 21h                    ; DOS 中断调用
  26.     main endp
  27. code ends
  28.     end main
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-21 15:58:17 | 显示全部楼层
arnomiller 发表于 2019-5-12 16:01
方法一:切片法
str1="a string for testing"
a=str1.find("s")                 #查找s在字符串中第一次 ...

这个还没学,不过非常感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-21 16:13:47 | 显示全部楼层
本帖最后由 MengGod酷李 于 2019-5-21 16:16 编辑


file:///C:/Users/admin/Pictures/change.png为啥会有后面的东西
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-21 16:54:34 | 显示全部楼层
本帖最后由 jackz007 于 2019-5-22 16:05 编辑
MengGod酷李 发表于 2019-5-21 16:13
file:///C:/Users/admin/Pictures/change.png为啥会有后面的东西


    其实字符串定义本来是这样的,贴成代码后内容被偷偷 “贪污” 掉了
    d1   db  0dh , 0ah , 'a string for testing.' , 0dh , 0ah , '$' , 00
    没错,就是这个 '$' 字符,int 21h,ah = 09h 功能调用显示字符串所要求字符串末尾的结束标志。

    楼主得用这次新贴出的替换掉原来的代码。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-10 02:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表