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;
}
发布了52 篇原创文章 · 获赞 25 · 访问量 1283

猜你喜欢

转载自blog.csdn.net/qq_45645641/article/details/104876000