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;
}