题目
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
输出格式
每个测试用例的输出占一行,输出倒序后的句子。
输入样例
Hello World Here I Come
输出样例
Come I Here World Hello
本题思路:两个指针分别指向字符串的头和尾,从后往前跑,将空格改为'\0'
#include <stdio.h>
int main(){
char str[100]; //定义一个字符数组
int i = 0;
while((str[i] = getchar()) != '\n'){ //由于需要输入空格并且getchar只用一次,因此只有getchar做循环条件
i++;
}
str[i] = '\0'; //输入的是字符数组,需要加\0方便以后输出字符串
char *p = str, *q = str; //定义两个指针指向str的头
while(*p != '\0'){
p++; //对指针p进行遍历指向末尾
}
while(p != q){
while(*p != ' ' && p != q){ //指针p往前走,遇到空格或者q,执行以下语句
p--;
}
if(p == q){
printf("%s", p); //指针遇到的是q,直接输出
}else{
*p = '\0'; //指着遇到空格,将其字符改为\0
printf("%s ", p+1); //从下一个元素开始输出
}
}
return 0;
}
// //以下为晴神版PAT单点测试代码,AC,粘贴的别人帖子
// //只能说太牛了
// #include<stdio.h>
// int main()
// {
// char a[90][90];
// int n = 0;//单词个数
// while(scanf("%s",a[n]) != EOF) {
// n++;
// }
// for(int i = n-1;i>=0;i--) {
// printf("%s",a[i]);
// if(i > 0) printf(" ");
// }
// return 0;
// }