Probably the most efficient way to do this is to look through the string, looking for whitespace. When you do, loop through the string from just before the whitespace back to the beginning of the word, outputing each character. Then output the whitespace, then set the beginning of the next word and keep going until you reach the end of the string. Where I say output, you could also append to a string then output the string all at once.
I would split the string up into an vector of sub strings. Reverse each sub string in the vector. Then combine them all back together. You can easily split a string with spaces by using string streams:
string line = "What a sunny day";
ss << line; // load the stream
while (ss >> temp) extract untill space or end
temp.clear(); // erase temp to fill again
// now parts = What, parts = a, parts = sunny, parts = day