主题:[讨论]浅议 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就一个都不用动,把指针改掉就行了,太简单了.
说明很简单
就是把字符串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就一个都不用动,把指针改掉就行了,太简单了.