' Gambas module file

Public Sub Main()
  Print SplitSum("-T1+T2-T3-T4+T5").Join("\n")
  Print "-----"
  Print SplitSum("+T1+T2-T3-T4+T5").Join("\n")
  Print "-----"
  Print SplitSum("-6.66+x-3.33x^3+x^11").Join("\n")
End

Private Function SplitSum(sInput As String) As String[]
  Dim aRes, aTmp As New String[]
  Dim iI, iJ As Integer
  Dim sExpr, sElement As String

  ' Zuerst alle durch + verknuepften Terme separieren
  aRes = Split(sInput, "+", "", True)
  
  ' For Each sElement In aRes
  '   Print selement
  ' Next  
  
  ' While statt For, weil aRes in der Schleife modifiziert wird
  iI = 0
  While iI < aRes.Count
 ' Das Vorzeichen am Term replizieren (wiederherstellen?)
    sExpr = IIf(aRes[iI] Not Begins "-", "+", "") & aRes[iI]
    Print "EXPR = ";; sExpr
    ' Der moeglicherweise kompliziertere Term wird durch ein
    ' Array einfacherer Terme ersetzt
    aRes.Remove(iI)
    ' Nun alle durch - verknuepften Terme separieren
    aTmp = Split(sExpr, "-", "", True)
    For iJ = 0 To aTmp.Max
      aTmp[iJ] = IIf(aTmp[iJ] Not Begins "+", "-", "") & aTmp[iJ]
    Next
    ' Das Array einfacherer Terme tritt an die Stelle von sExpr
    print aTemp
    aRes.Insert(aTmp, iI)
    iI += aTmp.Count
  Wend
  Return aRes
End

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Private Function IsPolynomial(sInput As String) As Boolean
  Dim sPattern As String
  
  sPattern = "^[+-]?([0-9]+([.]{1}[0-9]+)?)?(x([\\^][0-9]+)?)?$"
  sPattern = "^[+-]?([0-9]+(\\.[0-9]+)?)?(x([\\^][0-9]+)?)?$"    ' ---> "5.55x^10" ok
  
  If sInput Match sPattern Then
     Return True
  Else
     Return False
  Endif ' Match(sSubject, sPattern) = True ?
    
End

################################################################

Private Sub RestrictInput(sAllowed As String)
  Select Case Key.Code
    Case Key.Left, Key.Right, Key.BackSpace, Key.Delete, Key.End, Key.Home, Key.Enter, Key.Return
      Return
    Default
      If Key.Text And If InStr(sAllowed, Key.Text) Then
         Return
      Endif
  End Select
  Stop Event
End