7-32 说反话-加强版 (20point(s)).c

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

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

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

Hello World Here I Come

输出样例:

Come I Here World Hello

//   Date:2020/3/15
//   Author:xiezhg5 
#include<stdio.h>
#include<string.h>
int flag=1;  //定义一个全局变量作用于输出空格
void print(char str[],int flag1,int flag2 ) // 定义一个print函数 
{
    int i;
    if(flag!=1)
    {
        putchar(' ');           //输出空格 
    }
    for(i=flag2;i<=flag1;i++) //为数组元素下标赋值 
    {
        printf("%c",str[i]);
    }
    flag=0;   //循环完后将flag置为0 
}
int main(void)
{
    int  i,flag1=-1,flag2=-1; // 两个flag确定一个单词的位置
    char str[500001];      //不超过500000 
    gets(str);
    for(i=strlen(str)-1;i>=0;i--) //倒序便于输出
    {
        if(str[i]!=' '&&flag1<0)  // 单词尾部
        {
            flag1=i;
        }
        if((str[i]!=' '&&str[i-1]==' ')||(i==0)&&flag1>= 0) //单词头部
        {
            flag2=i;
        }
        if(flag1>=0&&flag2>=0) 
        {
            print(str,flag1,flag2);    //调用print函数 
            flag1=-1; 
            flag2=-1;
        }
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值