B1009 说反话

/*
题目描述
给定一个英语,要求编写程序,将句中所有单词按颠倒顺序输出

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

输入格式
每个测试用例的输出展一行,出倒叙后的句子。

样例输入
Hello World Here I Come

样例输出
Come I Here World Hello
**************************************************
思路
使用gets函数读入一整行,从左至右枚举每一个字符,以空格为为分隔符对单词进行划分
并按照顺序存放到二维字符数组中,最后按单词输入顺序的逆序来输入所有单词

注意点
1、最后一个单词之后输入空格会导致“格式错误”。
2、由于PAT是单点测试,因此产生了下面这种更简洁的方法,即使用EOF来判断是否已经输入完毕
*/
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main(){
    char str[90];
    gets(str);
    int len =strlen(str),r=0,h=0;  //r为行,h为列
    char ans[90][90];    //ans[0]~ans[r] 存放单词
    for(int i=0;i<len;i++)
    {
        if(str[i]!=' '){    //如果不是空格,则存放ans[r][h],并令h++
            ans[r][h++]=str[i];
        }
        else {    //如果是空格,说明一个单词结束,行r增加1,列恢复至0
            ans[r][h]='';      //末尾是结束符
            r++;
            h=0;
        }
    }
    for(int i=r;i>=0;i--)   //倒着输出单词即可
    {
        printf("%s",ans[i]);
        if(i>0) printf(" ");
    }
return 0;
}

/*
#include <stdio.h>

int main()
{
    char str[80][80];             //二维数组每一行存放一个单词
    char dsr[80];                 //存放输入的字符串
    int i, j = 0, k = 0;
    for(i = 0; i < 80; i++) {
        scanf("%c", &dsr[i]);
        if(dsr[i] == '
') {      //当输入回车时结束
            break;
        }
    }
    dsr[i] = '';                //让字符串中最后一个字符(回车符)等于''
    for(i = 0; i < 80; i++) {
        if(dsr[i] == '') {
            str[j][k] = '';
            break;
        }
        str[j][k]  = dsr[i];      //将单词存到第 j 行
        k++;
        if(dsr[i] == ' ') {
            str[j][k-1] = '';   //将空格换成''
            j++;
            k = 0;
        }
    }
    int t = j;                    //共有 t 个单词

    for(j = t ; j >= 0; j--) {
        printf("%s", str[j]);
        if(j != 0) {
            printf(" ");
        }
    }

    return 0;
}
*/
原文地址:https://www.cnblogs.com/z-712/p/7324017.html