回 帖 发 新 帖 刷新版面

主题:[讨论]浅议 mid$()= 的用法.(QB的越界1)

mid$(a$,i%,j%)=b$

说明很简单
就是把字符串a$的从i%位置开始的j%个字符替换成b$
其中j%可以省略,可以认为是len(b$)

当我们需要编辑某个字符串的内容时,
用mid$=很方便
不用mid$=语句的时候,我们需要
a$=left$(a$,i%-1)+b$+mid$(a$,i%+len(b$))

但我们在使用过程中要注意的是:

1. mid$= 不会改变源字符串 a$ 的长度
   (1). 源字符串 a$ 不可以是空串
   (2). 位置 i% 不能超过字符串 a$ 的末端,也就是说要求 i% <= len(a$)
   (3). 替换过程中以到达字符串 a$ 的末尾为止, b$ 多出来的字符串忽略不要.

2. mid$= 中的长度 j% 的实际意义
   (1). 省略时 j% = len(b$),
   (2). 当 j% > len(b$) 时,以 b$ 的长度为准,
   (3). 当 j% < len(b$) 时,以 j% 为准, b$ 以 left$(b$,j%) 有效替换
   (4). 位置 i% + 长度 j% 不能超过 a$ 的末尾,否则删减 j% .

    可以这样理解:
      if i% > len(a$) then stop   '出错
      if j% = 0 or j% > len(b$) then j% = len(b$)
      if j% < len(b$) then b$ = left$(b$,j%)
      if i% + j% - 1 > len(a$) then j% = len(a$) - i% + 1
      a$=len$(a$,i%-1) + left$(b$,j%) + right$(a$,len(a$)-i%-j%+1)

3. mid$= 的工作原理也是逐个字符替换的
     和内存读写(peek, poke)一样,都是一个字节一个字节的操作的
     为什么这样说呢? 你试试下面这句就知道了:
     a$="1234567890"
     mid$(a$,3)=a$
     是循环赋值来着

4. 常见用法
   (1). 从后面截短字符串,后置空格
        mid$(a$,i%)=space$(len(a$))
   (2). 从前面截短字符串,后置空格
        mid$(a$,1)=mid$(a$,i%)+space$(i%)
   (3). 删掉中间字符串,后置空格
        mid$(a$,i%)=mid$(a$,i%+j%)+space$(j%)
   注: 如果不后置空格的话,后面的字符是不会改变的.
       在这些方面QB比不上C的,对于内存批量转移复制移动操作
       QB需要一个一个来赋值,不可以改动变量的位置的
       C就一个都不用动,把指针改掉就行了,太简单了.
        

回复列表 (共2个回复)

沙发

不过还要注意一点哦,就是函数MID和MID语句是不一样的。
函数是要生成新的字符,语句只是把原来的字符改成新的字符。
这是moz所未提到的。

板凳

主题:MID$()有什么特点   收藏  打印  保存  举报  文本  
 
作者:lgm_boy
专家分:0
  会员信息
 发短消息
 所属BLOG 
 发表时间:2007-9-29 19:55:00    [回复]  

楼主
请问一下QBASIC里用MID$()有什么需要注意的地方.

我来回复

您尚未登录,请登录后再回复。点此登录或注册