vb中怎样将字符串中的字符一个一个的保存到字符串数组中?

解决方案 »

  1.   


    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
      

  2.   

    你可以看看《visual basic 6 高级编程》这本书,里面对这个问题有专门的解决方法。
      

  3.   

    dim str as string
    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|...(每个字符两个字节)
      

  4.   

    Option ExplicitPrivate arrChar() As String * 1Sub Test()
        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
      

  5.   

    我给楼主提供一种高效的方法
    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
      

  6.   

    11楼祭出RtlMoveMemory法宝啦,好:)
      

  7.   

    我给楼主提供一种高效的方法 
    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
      

  8.   

    11F 真是“高效”的方法吗?
    验证过没?据我的测试,你的方法比用 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
      

  9.   

    更正一下:
    '把第二个字符改为"a"
    Mid$(str, 2, 1) = "a"当然,这点失误不影响测试结果。
      

  10.   

    你把CopyMemory放到循环外试试 
      

  11.   


    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