VB字符串运算

前端之家收集整理的这篇文章主要介绍了VB字符串运算前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. '菜鸟的我写的不怎么好,高手莫笑
  1. Option Explicit
  2.  
  3. Public Function MyMainCount(ByVal Str As String) As Long '调用这个函数 Str为运算式:可带括号 返回求出来的值
  4. '支持+,-,*,/,()
  5. '先从()算起 从左至右
  6. Dim Str1 As String
  7. Dim Count As Long '整个算式的结果
  8. Dim i As Long
  9. Dim bracket As Long '括号位置
  10. bracket = 1 '从第一个
  11. Count = 0
  12. For i = 0 To Len(Str) '循环检测是否有括号
  13. bracket = InStr(bracket,Str,"(",vbTextCompare)
  14. If bracket = 0 Then '没有括号
  15. Count = MyCount(Str)
  16. Else '有括号
  17. '先算括号里面的
  18. Str1 = Mid(Str,bracket + 1,InStr(bracket,")",vbTextCompare) - 2) '分解出括号里面的 无括号
  19. Count = Count + MyCount(Str1)
  20. Str = Replace(Str,"(" & Str1 & ")",CStr(Count),vbTextCompare) '将原来字符串中的()中的内容替换为运算后的得数
  21. Count = 0 '只是为了将括号去掉 所以不记返回值
  22. End If
  23. bracket = bracket + 1 '当前括号已经运算所以作废 先前移动一个字符
  24. Next i
  25. MyMainCount = Count
  26. End Function
  27.  
  28. Public Function MyCount(ByVal Str As String) As Long 'Str不可带括号 四舍五入制
  29. On Error Resume Next
  30. Dim i As Long
  31. '判断有几个符号(数字=符号数量+1)
  32. Dim sym As Long '符号数量
  33. sym = 0
  34. For i = 0 To Len(Str)
  35. If Mid(Str,i + 1,1) = "+" Or Mid(Str,1) = "-" Or Mid(Str,1) = "*" Or Mid(Str,1) = "/" Then
  36. sym = sym + 1
  37. End If
  38. Next i
  39. '提出所有数字存入数组 提出所有符号存入到数组
  40. Dim number() As Long '数字数组
  41. Dim numbercount As Long '数字总数
  42. Dim tmpbuffer As String '缓冲数组字符区
  43. ReDim number(sym) '动态设置数组维数
  44. '-------------------------------------------
  45. Dim symstring() As String '符号数组
  46. ReDim symstring(sym - 1) '动态设置数组维数
  47. Dim symcount As Long '符号总数
  48. numbercount = 0
  49. symcount = 0
  50. '开头不能是符号
  51. For i = 0 To Len(Str) - 1
  52. If Asc(Mid(Str,1)) >= &H30 And Asc(Mid(Str,1)) <= &H39 Then '0~9Ascii
  53. tmpbuffer = tmpbuffer & Mid(Str,1) '添加到缓冲区
  54. Else '是运算符
  55. number(numbercount) = Val(tmpbuffer) '将缓冲区输入到数组
  56. numbercount = numbercount + 1 '数字总数+1
  57. tmpbuffer = "" '清空运算符 供下次使用
  58. '将运算符输入到数组
  59. symstring(symcount) = Mid(Str,1)
  60. symcount = symcount + 1
  61. End If
  62. Next i
  63. '将最后一个(结尾为数字)数组提出
  64. number(numbercount) = Val(tmpbuffer) '将缓冲区输入到数组
  65. numbercount = numbercount + 1 '数字总数+1
  66. tmpbuffer = "" '清空运算符 供下次使用
  67. '--------------------------------------------
  68. '开始运算
  69. '没有括号(不同级:先*/再+-)(同级:从左到右)
  70. '运算符有几个就算几次
  71. 'Dim Level As Long '1=乘除级别 0=加减级别
  72. Dim ii As Long
  73. 'Level = 0
  74. 'For i = 0 To symcount - 1 '判断是否有乘除符号
  75. ' '找乘除
  76. ' If symstring(i) = "/" Or symstring(i) = "*" Then '有乘除
  77. ' Level = 1 '乘除级别
  78. ' Exit For
  79. ' End If
  80. 'Next i
  81. '先乘除后加减-------------------------------------------------------------
  82. '乘除从左到右
  83. For i = 0 To symcount - 1
  84. If i > symcount - 1 Then '超出范围了
  85. Exit For
  86. End If
  87. If symstring(i) = "/" Or symstring(i) = "*" Then '乘法Or除法
  88. If symstring(i) = "/" Then
  89. '没有算的最左边的/符号 开始进行除法运算
  90. number(i) = number(i) / number(i + 1) '除法运算
  91. End If
  92. If symstring(i) = "*" Then
  93. '没有算的最左边的*符号 开始进行乘法运算
  94. number(i) = number(i) * number(i + 1) '除法运算
  95. End If
  96. '数字数组减少一个 缺了一个空补上
  97. For ii = i + 1 To numbercount - 1
  98. number(ii) = number(ii + 1) '替换
  99. Next ii
  100. numbercount = numbercount - 1
  101. ReDim Preserve number(numbercount - 1) '保留+重定义
  102. '符号数组减少一个
  103. For ii = i + 1 To symcount - 1
  104. symstring(ii - 1) = symstring(ii)
  105. Next ii
  106. symcount = symcount - 1
  107. ReDim Preserve symstring(symcount - 1)
  108. i = i - 1 '回滚
  109. End If
  110. Next i
  111. '加减从左到右
  112. For i = 0 To symcount - 1
  113. If i > symcount - 1 And symcount < 1 Then '超出范围了并且没有运算符号了就退出循环(不用运算了)
  114. Exit For
  115. Else '其中有一个为False特别是第二个就说明还有一个运算符 还要运算一次 所以将第一个与第二个进行运算
  116. If i > symcount - 1 Then
  117. i = 0 '设置数组元素第1个
  118. End If
  119. End If
  120. If symstring(i) = "+" Or symstring(i) = "-" Then '加法Or减法
  121. If symstring(i) = "+" Then
  122. '没有算的最左边的/符号 开始进行除法运算
  123. number(i) = number(i) + number(i + 1) '加法运算
  124. End If
  125. If symstring(i) = "-" Then
  126. '没有算的最左边的*符号 开始进行乘法运算
  127. number(i) = number(i) - number(i + 1) '减法运算
  128. End If
  129. '数字数组减少一个 缺了一个空补上
  130. For ii = i + 1 To numbercount - 1
  131. number(ii) = number(ii + 1) '替换
  132. Next ii
  133. numbercount = numbercount - 1
  134. ReDim Preserve number(numbercount - 1) '保留+重定义
  135. '符号数组减少一个
  136. For ii = i + 1 To symcount - 1
  137. symstring(ii - 1) = symstring(ii)
  138. Next ii
  139. symcount = symcount - 1
  140. ReDim Preserve symstring(symcount - 1)
  141. i = i - 1
  142. End If
  143. Next i
  144. '-----------------------------------------------------------------------------------------------
  145. MyCount = number(0) '返回结果(数组的第一个元素) 因为前面删除了空出来的元素 最后只剩下答案了
  146. End Function

猜你在找的VB相关文章