#include <iostream>
#include <string>
using namespace std;
string reverse(string sentence)
{
string::iterator begin = sentence.begin();
string::iterator end = sentence.end();
char tmp;
while( begin < end )
{
tmp = *begin;
*begin = *(end-1);
*(end-1) = tmp;
begin++;
end--;
}
string::size_type num = sentence.size();
string::size_type i = 0;
string::size_type begin_tmp;
string::size_type end_tmp;
while( i < num ) //只能用字符串下标判断
{
if(sentence[i] != ' ')
{
begin_tmp = i;
while(sentence[i] != ' ')
{
i++;
if(i>=num) //防止下标越界
{
break;
}
}
i = i-1;
end_tmp = i;
}
while(begin_tmp<end_tmp)
{
tmp = sentence[begin_tmp];
sentence[begin_tmp] = sentence[end_tmp];
sentence[end_tmp] = tmp;
begin_tmp++;
end_tmp--;
}
i++;
}
return sentence;
}
void main()
{
string sentence ;
getline(cin, sentence);
sentence = reverse(sentence);
cout<<sentence<<endl;
}
注意:虽然string库提供迭代器 string::iterator end = sentence.end() ,可以很方便的定位到字符串最后一个字符之后,但是迭代器end无法进行*end操作(出现*end就会报错)也就无法用*end = NULL来进行边界条件判断,只能依靠下标值来进行判断。