字符串处理之反转单词

103. 反转单词
时间限制 1000 ms 内存限制 65536 KB
题目描述
给出一句英文句子(只由大小写字母和空格组成,不含标点符号,也不会出现连续的空格),请将其中的所有单词顺序翻转
输入格式
多组数据,以EOF结束。
每行一句英文句子(确保只由大小写字母和空格组成,不含标点符号,也不会出现连续的空格,字符串总长度1000以内)
输出格式
每组数据输出一行,为反转后的字符串
输入样例
It is a apple
输出样例
apple a is It

思路:
1. 从后向前,依次对每个单词进行反转,以空格作为一个单词的结束符。
2. 每次输出单词时,以上一次的空格tmp为结束符(包括tmp),初始时tmp一定要等于字符串的长度,这样确保tmp初试时就为'\0', 因为为字符串的结束符就是'\0'. 这样便于后面的输出。
3. 本题要求是对句子中的每个单词反转,句子中间含有空格,因此输入时不能用scanf函数,只用用gets函数
4. scanf 和 gets 函数的区别:
    scanf在读入字符串时,遇到空格和回车都会停止输入,并将空格和回车clear.
    而gets函数会接受空格这个字符,遇到回车停止,并自动清除回车

AC代码:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
char str[1005]; 
int main(){
	
	   while(gets(str)!=NULL){
		 //gets()会将回车读入,并自动去掉回车 
		int tmp = strlen(str); //tmp用来记录空格的位置 
		for(int i=tmp;i>=0;i--)
		{
			if(str[i]==' ')
			  {
			  	 for(int j=i+1;j<=tmp;j++)
			  	    cout<<str[j];
				 tmp=i;
			  }
		   
		}
		 //对倒序最后一个单词(正序的第一个单词)的输出特殊处理一下 
		 for(int k=0;k<tmp;k++) //注意这里不用加等号,最后一个不要空格 
		   cout<<str[k];
		cout<<'\n';
		  
	} 
	
	return 0;
	
} 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值