PAT Basic 1009. 说反话

PAT Basic 1009. 说反话

1. 题目描述:

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

2. 输入格式:

测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。

3. 输出格式:

每个测试用例的输出占一行,输出倒序后的句子。

4. 输入样例:

Hello World Here I Come

5. 输出样例:

Come I Here World Hello

6. 性能要求:

Code Size Limit
16 KB
Time Limit
400 ms
Memory Limit
64 MB

思路:

首先利用gets()将字符串读入,然后遍历每一个字符,当遇到空格时将其替换为'\0',方便最后的输出(因为C风格字符串以空字符为结束标志)。这里flag用于标志一个单词的开始,创建的pChar字符数组用于记录每个单词的开头位置。

回看这里时发现好像直接倒序遍历字符串就好了,这样就不用记录每个单词的开头位置。

My Code:

#include <stdio.h>

int main(void)
{
    char sentence[81];
    char *pChar[80];
    unsigned char count = 0; // record words number
    unsigned char flag = 0; // to flag a start of word
    
    gets(sentence); // input the string
    
    pChar[0] = sentence;
    while(*pChar[0] != '\0')
    {
        if(*pChar[0] != ' ' && flag == 0)
        {
            pChar[++count] = pChar[0];
            flag = 1;
        }
        else if(*pChar[0] == ' ')
        {
            *pChar[0] = '\0';
            flag = 0;
        }
        
        pChar[0]++;
    }
    
    for(int i = count; i >=1 ; i--)
    {
        printf("%s%c", pChar[i], i==1 ? '\0' : ' ');
    }
    
    return 0;
}
posted @ 2023-03-06 20:48  十豆加日月  阅读(11)  评论(0编辑  收藏  举报