1009 说反话(C语言)
题目描述
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
解题思路
第一步
先定义一个长度为81的字符数组array[81]来存储字符串,因字符串中带空格,
而scanf()函数遇到空格会停止输入,所以用gets()函数代替scanf()进行输入。
第二部
使用while()函数结束条件为找到'\0'结束符循环遍历字符数组,确定字符串长度i。
第三步
反向遍历字符串数组匹配空格,输出空格后的单词,再将空格符为结束符'\0',
当遍历到倒数第二个空格时,输出倒数第二个空格后面的单词时,当输出到原倒数第一个空格的位置时,
其存储内容为'\0'结束符,故而输出结束。
以此类推,可以从后往前输出n-1个单词,因首单词前面没有空格。
第四步
直接输出字符串array
因为首单词后的空格已经置为结束符’\0’,所以将首单词输出后会直接结束。
程序结束
具体代码
内存200KB,用时3ms
#include <stdio.h>
int main(){
int i=0;
char array[81];
gets(array); //scanf无法直接输入带空格的字符串,所以用gets函数
while(array[i]!='\0') i++; //while循环遍历出字符串长度
for(;i>=0;i--){
if(array[i]==' '){ //从后往前匹配空格
printf("%s ",&array[i+1]); //输出空格后的字符串
array[i]='\0'; //将空格置为结束符
}
}
printf("%s",array); //输出字符串的第一个单词
return 0;
}