C/C++[PAT B1009]说反话

1009 说反话 (20)

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

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

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

输入样例:

Hello World Here I Come
输出样例:

Come I Here World Hello

用fgets()来取代gets(),两者功能类似,fgets()比gets()多两个参数,一个是字符串的最大长度,和file steam
str:Pointer to an array of chars where the string read is copied.
num:Maximum number of characters to be copied into str (including the terminating null-character).
stream:Pointer to a FILE object that identifies an input stream.
stdin can be used as argument to read from the standard input.
stdin意思是从键盘输入.
注意:fgets()输入的字符串最后是一个’\n’字符.

#include <iostream>
#include <cstring>
using namespace std;
int main() {
    char str[90] = {};
    char ans[80][15]={};
    fgets(str, 90, stdin);
    int l = strlen(str);
    int i = 0, j = 0;
    //l - 1 :减去最后一个'\n'字符的长度.
    for (int k = 0; k < l-1; k++) {
        if (str[k] != ' ')
            ans[i][j++] = str[k];
        else{
            ans[i][j] = '\0'; //字符串结束标志
            i++;
            j = 0;  //列索引重置
        }
    }
    for (int k = i; k >= 0; k--) {
        cout<<ans[k];
        if (k > 0) cout<<' ';
    }
    return 0;
}

gets(),会出现waring : gets(char*)’ is deprecated
但是子一些oj会编译错误,未定义的gets()

#include <iostream>
#include <cstring>
using namespace std;
int main() {
    char str[90] = {};
    char ans[80][15]={};
    gets(str);
    int l = strlen(str);
    int i = 0, j = 0;
    for (int k = 0; k < l; k++) {
        if (str[k] != ' ')
            ans[i][j++] = str[k];
        else{
            ans[i][j] = '\0';
            i++;
            j = 0;
        }
    }
    for (int k = i; k >= 0; k--) {
        cout<<ans[k];
        if (k > 0) cout<<' ';
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/u014281392/article/details/80715976