that looks pretty solid to me. It is easy to read, maintain, and does what you want done.
you could use something more convoluted to avoid all the conditions -- eg a map of function pointers, such that input keys the correct function with no if statements. If you have a LOT of functions, something like that may clean up the code and be microscopically more efficient (string comparisons are slow relatively, and add up if you have a bunch).
you can rewrite it with a switch if you can make input an integer somehow.
you can do it with a class, but that would IMHO be very strange code to read and deal with. Something like a class with a string member that uses OOP tricks to call the correct function based off something wonky it did in the constructor from the string... but here we have one of those 'just because you can do something' approaches... this feels wrong to me.
Is there something you dislike about what you have?