试题5:句子逆序

试题描述:
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
输入:
I am a boy
输出:
boy a am I

解题思路:以单词间的空格为切入点,划分出每个单词,然后从后往前打印每个单词即可,需要注意首尾两个单词旁边只有一个空格,需要进行特殊处理。

解法一:

#include 
#include 

void reverse_sentense(char* p, int N)
{
    int a[512];
    int i = 0, j = 0, k = 0;

    for(i = 0; i < N; i++)
    {
        if(p[i] == ' ')
        {
            a[j++] = i;
        }
    }

    for(i = j - 1; i >= 1; i--)
    {

        if(i == j - 1)
        {
            for(k = a[i] + 1; k < N; k++)
            {
                printf("%c", p[k]);
            }
            printf(" ");
        }

        for(k = a[i - 1] + 1; k < a[i]; k++)
        {
            printf("%c", p[k]);
            if(k == a[i] - 1)
            {
                printf(" ");
            }
        }
        if(i == 1)
        {
            for(k = 0; k < a[i-1]; k++)
            {
                printf("%c", p[k]);
            }
            printf(" ");
        }
    }

}

int main()
{
    char str[1024];
    gets(str);

    int len = strlen(str);
    reverse_sentense(str, len);

    return 0;
}

解法二:

#include 
#include 
 
int main()
{
    char str[10000];
    int a,len,i;
    gets(str);
    len = strlen(str);
    for(i=len-1;i>=0;i--)
    {
        if(str[i]==' ')
        {
            a = i+1;
            while(str[a]!=' ')
            {
                if(a==len)
                    break;
                printf("%c", str[a]);
                a++;
            }
            printf(" ");
        }
 
    }
    i=0;
    while(str[i]!=' ')
    {
        printf("%c",str[i]);
        i++;
    }
    return 0;
}

你可能感兴趣的:(试题5:句子逆序)