willsun888
9/22/2013 - 1:10 PM

将一句话里的单词进行倒置,标点符号不倒置。比如一句话:i come from beijing.倒置后变成:beijing. from come i

将一句话里的单词进行倒置,标点符号不倒置。比如一句话:i come from beijing.倒置后变成:beijing. from come i

//解析:解决该问题可以分为两步:第一步全盘置换该语句成:.gnijieb morf emoc i。第二步进行部分翻转,如果不是空格,则开始翻转单词。
#include <iostream>
using namespace std;
 
int main ()
{
    int i=0, j=0,begin, end;
    char str[] = "i come from beijing.";
    char temp;
    j = strlen(str) - 1;
    //第一步是进行全盘翻转
    while(j>i)
    {
        temp = str[i];
        str[i++] = str[j];
        str[j--]=temp;
    }
    //第二步进行部分翻转
    i=0;
    while(str[i])
    {
        if(str[i] != ' ')
        {
            begin = i;
            while(str[i] && str[i] != ' ')
                i++;     //找到str[i]为空格符
            i = i - 1;    	//空格符回退一个
            end = i;
        }
        while(end > begin) //部分翻转
        {
            temp = str[begin];
            str[begin++] = str[end];
            str[end--] = temp;
        }
        i++; 
    }
    cout << "string:" << str << endl;
}