[PTA]7-32 说反话-加强版

Spring-_-Bear 的 CSDN 博客导航

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

输入格式:

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

输出格式:

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

输入样例:

Hello World      Here I Come
结尾无空行

输出样例:

Come I Here World Hello
结尾无空行

来源:

来源:PTA | 程序设计类实验辅助教学平台
链接:https://pintia.cn/problem-sets/14/exam/problems/812

提交:

在这里插入图片描述

题解:

#include<stdio.h>
#include<string.h>

int main() {
    char word[500001];
    gets(word);

    // head 和 tail 一前一后共同确定一个单词
    int head = -1;
    int tail = -1;
    // isPrintBlank 判断是否需要输出空格:[0]输出空格 [1]不输出空格
    int isPrintBlank = 1;
    // 倒序遍历字符串,依次输出每个单词
    for (int i = (int) strlen(word) - 1; i >= 0; i--) {
        // 单词尾
        if (word[i] != ' ' && tail == -1) {
            tail = i;
        }

        // 单词头
        if ((word[i] != ' ' && word[i - 1] == ' ') || i == 0 && tail != -1) {
            head = i;
        }

        // 输出当前单词
        if (head != -1 && tail != -1) {
            if (isPrintBlank == 0) {
                putchar(' ');
            }

            for (; head <= tail; head++) {
                printf("%c", word[head]);
            }

            isPrintBlank = 0;
            tail = -1;
            head = -1;
        }
    }

    return 0;
}
  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春天熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值