说反话
题目要求:
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子。
输入样例1:
Hello World Here I Come
输出样例1:
Come I Here World Hello
解题思路:
定义一个数组存放用户输入的英文短句,再定义一个二维数组,每一行存放一个单词。将单词按顺序分别放入二维数组中,倒序输入二维数组的行即可。
完整程序:
/*
【解题思路】
定义一个数组存放用户输入的英文短句
定义一个二维数组,每一行存放一个单词
将单词按顺序分别放入二维数组中
倒序输入二维数组的行即可
*/
#include <stdio.h>
int main()
{
char str_word[80][80]; // 二维数组行存放单词
char str[80]; // 字符数组存放用户输入的用户短句
int i,j = 0,k = 0;
for(i = 0;i < 80;i ++) {
scanf("%c",&str[i]);
if(str[i] == '\n') // 如果用户输入回车,则结束输入
break;
}
str[i] = '\0'; // 将回车改为'\0'
for(i = 0;i < 80;i ++) {
if(str[i] == '\0') { // 整句话结束
str_word[j][k] = '\0';
break;
}
str_word[j][k] = str[i];
k ++;
if(str[i] == ' ') { // 一个单词结束
str_word[j][k - 1] = '\0'; // 将空格换成'\0'
j ++;
k = 0;
}
}
for(j;j >= 0;j --) { // 此时j等于二维数组行数-1
printf("%s",str_word[j]);
if(j != 0)
printf(" ");
}
return 0;
}