यह तुलना में यह लगता है अधिक जटिल है:
अपने लक्ष्य को एक स्ट्रिंग का मूल्यांकन करने के लिए बस है, तो हो सकता है eval()
अपने जवाब है। अगर मैं गलत नहीं हूं तो एक केएक्स + मीटर में अधिकतम 7 ऑपरेटर और 1 ऑपरेटर का न्यूनतम हो सकता है। और इस तरह के परिदृश्य में "के" और "एम" मान प्राप्त करने के लिए यह वास्तव में जटिल हो जाता है। - सिद्धार्थ राउत 33 मिनट पहले
duffymo की पोस्ट में मेरी टिप्पणी पर
बिल्डिंग
इस स्नैपशॉट विभिन्न संयोजनों से पता चलता "KX + m" हो सकता है
और जैसा कि पहले सुझाव दिया गया था, आप जो चाहते हैं उसे हासिल करना बहुत जटिल है। इस समय मेरे कमजोर प्रयास को "K" निकालने के लिए यहां दिया गया है। यह कोड किसी भी तरह से वर्गीकृत नहीं है :(इसके अलावा मैंने विभिन्न परिदृश्यों के साथ कोड का परीक्षण नहीं किया है, इसलिए यह दूसरों के साथ असफल हो सकता है। हालांकि यह आपको इस समस्या से संपर्क करने के बारे में एक उचित विचार देता है। आपको सटीक परिणाम प्राप्त करने के लिए इसे और अधिक ट्वीक करें।
कोड (मैं इस कोड में 7 संभावित संयोजनों के लिए परीक्षण कर रहा हूं।यह इन 7 के लिए काम करता है लेकिन/दूसरों के लिए असफल हो जायेगी हो सकता है)
Option Explicit
Sub Sample()
Dim StrCheck As String
Dim posStar As Long, posBrk As Long, pos As Long, i As Long
Dim strK As String, strM As String
Dim MyArray(6) As String
MyArray(0) = "-k*(-x)+(-m)*(-2)"
MyArray(1) = "-k*x+(-m)*(-2)"
MyArray(2) = "-k(x)+(-m)*(-2)"
MyArray(3) = "-k(x)+(-m)(-2)"
MyArray(4) = "-kx+m"
MyArray(5) = "kx+m"
MyArray(6) = "k(x)+m"
For i = 0 To 6
StrCheck = MyArray(i)
Select Case Left(Trim(StrCheck), 1)
Case "+", "-"
posBrk = InStr(2, StrCheck, "(")
posStar = InStr(2, StrCheck, "*")
If posBrk > posStar Then '<~~ "-k*(-x)+(-m)*(-2)"
pos = InStr(2, StrCheck, "*")
If pos <> 0 Then
strK = Mid(StrCheck, 1, pos - 1)
Else
strK = Mid(StrCheck, 1, posBrk - 1)
End If
ElseIf posBrk < posStar Then '<~~ "-k(-x)+(-m)*(-2)"
pos = InStr(2, StrCheck, "(")
strK = Mid(StrCheck, 1, pos - 1)
Else '<~~ "-kx+m"
'~~> In such a case I am assuming that you will never use
'~~> a >=2 letter variable
strK = Mid(StrCheck, 1, 2)
End If
Case Else
posBrk = InStr(1, StrCheck, "(")
posStar = InStr(1, StrCheck, "*")
If posBrk > posStar Then '<~~ "k*(-x)+(-m)*(-2)"
pos = InStr(1, StrCheck, "*")
If pos <> 0 Then
strK = Mid(StrCheck, 1, pos - 2)
Else
strK = Mid(StrCheck, 1, posBrk - 1)
End If
ElseIf posBrk < posStar Then '<~~ "k(-x)+(-m)*(-2)"
pos = InStr(1, StrCheck, "(")
strK = Mid(StrCheck, 1, pos - 2)
Else '<~~ "kx+m"
'~~> In such a case I am assuming that you will never use
'~~> a >=2 letter variable
strK = Mid(StrCheck, 1, 1)
End If
End Select
Debug.Print "Found " & strK & " in " & MyArray(i)
Next i
End Sub
स्नैपशॉट
यह काफी नहीं है, लेकिन मैं यह सही रास्ते में आप हो जाता है आशा है कि ...
+ के रूप में
StrFunc
बदलें! एक दिलचस्प सवाल के लिए :) –