I really think this looks more like a code review, but let it be so - first: please share some problems - you baked everything into a big dirty monster - think about the parts of the problem and put them in separate methods to start with.
Then: if you cannot solve the problem with the hole, first make it smaller: let the user enter some kind of separator for the parts or assume that he is doing now - the space will be fine. You can think about how to handle statements without pre / postfixed spaces later. So try parsing "2 3+" instead of "23+" or "2 3+" ... If you do this, you can just use String.Split to make your life a lot easier!
As for how you can recognize the operand: very simple - try Double.TryParse , it will tell you if you gave it a valid number and you do not need to spend your time parsing numbers yourself
Instead of using it for a while, you should use for or even better foreach - hell, you can even do it with LINQ and [Enumerable.Aggregate][1] and get FUNctional: D
And finally, do not use this if / then / else mess if the switch is doing the job ...
source share