PTA基础编程题目集-7-32 说反话-加强版

7-32 说反话-加强版

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:

测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。

输出格式:

每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。

输入样例:

Hello World Here I Come

输出样例:

Come I Here World Hello

代码长度限制 16 KB
时间限制 300 ms
内存限制 64 MB

题解

思路:因为要将单词倒着输出,因此我们可以倒着遍历读入的句子,用一个临时的temp将单词倒着存起来,至于要判断在遍历句子时碰到空格的时候再将它倒着输出就行。

#include <stdio.h> 
#include <string.h>
int main()
{
  char str1[500001],temp[500001];
  int n;
  gets(str1);
  int k=0,start=0;//k是每个独立单词的长度,start控制输出的单词间的空格
  for(int i=strlen(str1)-1;i>=0;i--){//倒着遍历str1
    if(str1[i]==' '){//该位为空格
      if(k!=0){//当临时数组中有内容时
        if(start!=0) printf(" ");
        else start=1;
        //输出
        for(int j=k-1;j>=0;j--){
          printf("%c",temp[j]);
        }
      }
      memset(temp,0,k);//重置临时数组
      k=0;//重置临时数组下标
    }
    else{//该位非空格
      temp[k++]=str1[i];//将字符存入临时数组
    }
  }
  if(k!=0){//当临时数组中有内容时
        if(start!=0) printf(" ");
        //输出
        while(k--){
          printf("%c",temp[k]);
        }
  }
  return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值