[code=vb
]Private Sub Command7_Click(Index As Integer)
m1 = Val(Text1.Text) '計算符號前取數1
suanfa = Command7(Index).Caption
Text1.Text = ""
End Sub
Private Sub Command6_Click()
m2 = Val(Text1.Text) '等號取數2
Select Case suanfa
Case "+"
Text1.Text = m1 + m2
Case "-"
Text1.Text = m1 - m2
Case "*"
Text1.Text = m1 * m2
Case "/"
If (m2 = 0) Then
Text1.Text = "除數不能為0."
Else
Text1.Text = m1 / m2
End If
這個是作業。。目前只能實作一次的加減。。如何連加連減呢?
End Select
End Sub
[/code]
uj5u.com熱心網友回復:
參考《編譯原理》中的詞法分析和有限狀態自動機。參考下面,盡管是C:
//有字串
//1_22_333,,4444__55555,_666666
//需要決議為
//1
//22
//333
//_
//4444
//55555
//666666
#include <stdio.h>
char s[]="1_22_333,,4444__55555,_666666";
char c,*p,*p1;
int st;
void main() {
st=0;
p=s;
while (1) {
c=*p;
if (0==c) {
switch (st) {
case 1:printf("_\n"); break;
case 2:printf("%s\n",p1);break;
}
break;//
}
switch (st) {
case 0:
if ('_'==c) { st=0;}
else if (','==c) { st=1;}
else {p1=p; st=2;}
break;
case 1:
if ('_'==c) { st=1;}
else if (','==c) {printf("_\n"); st=1;}
else {p1=p; st=2;}
break;
case 2:
if ('_'==c) {*p=0;printf("%s\n",p1);*p=c;st=0;}
else if (','==c) {*p=0;printf("%s\n",p1);*p=c;st=1;}
else { st=2;}
break;
}
p++;
}
}
//1
//22
//333
//_
//4444
//55555
//666666
uj5u.com熱心網友回復:
謝謝老師回答。。。可我還是沒有明白。。
uj5u.com熱心網友回復:
只能逐字符掃描運算式....掃描到非字符,記錄下位置,將該字符之前的文本用mid取出,然后轉成數字,當作 數字1參與運算,然后取出運算子號,然后繼續掃描到下個運算子或者運算式結尾,用mid取出,做為數字2,用剛才的運算子號運算,結果當作數字1,然后繼續掃描到運算式結束....整個流程就是這樣....不過做為給初學者的題目,有點難為了....說實在的....
uj5u.com熱心網友回復:
代碼除錯通過....
Private Sub Form_Load()
Dim exp As String
exp = "3*4/6" '要計算的運算式,只支持從做往右的+-*/ 不支持小數運算
Dim strNum As String, strOpt As String '暫存數字
Dim str As String
Dim Result As Long, Num As Long
Dim i As Long
For i = 1 To Len(exp)
str = Mid$(exp, i, 1) '每次取一個字符
If (IsNumeric(str) = False) Then '遇到運算子,
Num = Int(strNum) '將之前的數字字串轉為數字
strNum = ""
If Len(strOpt) = 0 Then '之前沒有發現過標點符號,第一個數做為結果
Result = Num
Else
Result = CalIt(Result, Num, strOpt) '之前發現過標點符號,進行運算
End If
strOpt = str '記錄新的標點符號
Else '沒遇到運算子,合并到之前的數字
strNum = strNum & str
End If
Next
If Len(strNum) > 0 Then
Num = Int(strNum)
Result = CalIt(Result, Num, strOpt)
End If
MsgBox Result
End Sub
Function CalIt(ByVal Num1 As Long, ByVal Num2 As Long, ByVal Opt As String) As Long
If Len(Opt) = 0 Then Opt = "+" '默認運算子是加號
Select Case Opt
Case "+"
CalIt = Num1 + Num2
Case "-"
CalIt = Num1 - Num2
Case "*"
CalIt = Num1 * Num2
Case "/"
CalIt = Num1 / Num2
End Select
End Function
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/85552.html
標籤:VB基礎類
上一篇:vb如何直接呼叫vbs代碼
下一篇:EXCEL VBA的一個問題
