vb中怎样将字符串中的字符一个一个的保存到字符串数组中?
解决方案 »
- VB在对SQL进行操作时的一个问题
- 关于mapx的问题,急急急~~~~在线等待
- 为什么我的FTp客户端可以得到第一个文件的大小,第二个开始就得不到了
- ***vb中有什么好的方法实现打印功能?请大虾给点建议***
- *******高分请教问题,解决了我有2000分***********高分请教问题,解决了我有2000分**********高分请教问题,解决了我有2000分**********
- 我是初学者,谁能和我说说连数据库的方法,不胜感激
- 鼠标单击右键菜单时产生什么事件,怎么捕捉
- ping的原理是什么?现用vb做一个检测网络是否通畅的小程序?
- 求助:有关串口不收数据时的问题
- 请问高手,如何获得一个用户的使用权限(对数据库)?
- 请问如何在窗期加载时用treeview和listview显示某一目录下的文件夹和文件
- 数据更新出现问题
Private Sub Command1_Click()
Dim s$, n&
ReDim ss$(0)
s = "abcd"
For i = 1 To Len(s)
ReDim Preserve ss(n)
ss(n) = Mid(s, i, 1): n = n + 1
Next i
End Sub
str="a string"
size=len(str)
dim a(8) as integer
for i=0 to size-1
a(i)=asc(mid(str,i+1,1))
next但是这种代码效率很低……
你可以试着调用CallWindowProc
直接运行汇编好的机器代码……
因为VB里字符串是unicode编码的,它的结构是:字符串长度 | 字符1|2|3|...(每个字符两个字节)
Dim s$, i&
s = "abcde 12345"
i = Len(s): ReDim arrChar(1 To i)
For i = 1 To i
arrChar(i) = Mid$(s, i, i)
Next
End Sub
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Private Sub Command1_Click()
Dim str As String
str = "中国人民万岁"
Dim CharArr() As Integer
ReDim CharArr(Len(str) - 1)
CharArr(0) = 1
CopyMemory CharArr(0), ByVal StrPtr(str), Len(str) * 2
'把第一个字符改为"人"
CharArr(0) = AscW("人")
'把第二个字符改为"a"
CharArr(1) = 97
CopyMemory ByVal StrPtr(str), CharArr(0), Len(str) * 2
End Sub
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Private Sub Command1_Click()
Dim str As String
str = "中国人民万岁"
Dim CharArr() As byte
ReDim CharArr(Len(str) - 1)
CharArr=strconv(str,vbfromUnicode)
End Sub
验证过没?据我的测试,你的方法比用 Mid$() 慢得多了。
在 IDE 中,CopyMemory 耗时约是 Mid$() 的3.2倍。
编译成 .exe 后,约为 1.8 倍。
Option ExplicitPrivate Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Private Sub Command1_Click()
Dim str As String
Dim i&, t#, N&
Dim CharArr() As Integer
Me.Cls
N = 12000000
str = "中国人民万岁"
t = Timer()
ReDim CharArr(Len(str) - 1)
For i = 1 To N
CopyMemory CharArr(0), ByVal StrPtr(str), Len(str) * 2
'把第一个字符改为"人"
CharArr(0) = AscW("人")
'把第二个字符改为"a"
CharArr(1) = 97
CopyMemory ByVal StrPtr(str), CharArr(0), Len(str) * 2
Next
Me.Print "用 CopyMemory() 耗时:"; Timer() - t
DoEvents
str = "中国人民万岁"
t = Timer()
For i = 1 To N
'把第一个字符改为"人"
Mid$(str, 1, 1) = "人"
'把第二个字符改为"a"
Mid$(str, 1, 1) = "a"
Next
Me.Print "用 Mid$() 耗时:"; Timer() - t
End Sub
'把第二个字符改为"a"
Mid$(str, 2, 1) = "a"当然,这点失误不影响测试结果。
Private Sub Command1_Click()
Dim a() As String, b As String
Dim L As Integer, i As Integer
b = "abcdefg"
L = Len(b): ReDim a(1 To L)
For i = 1 To L
a(i) = Mid(b, i, 1)
Next
Debug.Print Join(a, ",")
End Sub