问题描述
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
数据范围:输入的字符串长度满足 1≤n≤1000
注意本题有多组输入
输入描述:
输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母。
输出描述:
得到逆序的句子
解题分析
这道题跟 字符串反转一样,我们首先要解决的问题还是怎么接收。因为这次输入的是句子,而句子里面有空格,所以我们就不能用scanf接收了,要用gets()。
这道题要求把句子中的单词反向输出,所以我们可以先把句子全体逆序,然后在把单个的单词逆序,这样就解决问题啦(翻转的方法跟字符串反转一样,这里我就不加赘述了)
代码实现
#include<stdio.h> void reverse(char* left,char* right) { while(left<right) { char tmp = *left; *left = *right; *right =tmp; left++; right--; } } int main() { char arr[1000]; gets(arr); int len = strlen(arr); char* left=arr; char* right=arr; right+=len-1; reverse(left,right); char* start = arr; char* end = arr; while(*end !='\0') { while(*end!=' '&&*end!='\0') { end++; } reverse(start,end-1); start = ++end; } printf("%s",arr); return 0; }