当前位置: 首页 > news >正文

PAT乙级 说反话(1009)c++新手易懂版

作者:Smoothzjc

博客地址:https://blog.csdn.net/weixin_53893220

题目:

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

输入格式:

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

输出格式:

每个测试用例的输出占一行,输出倒序后的句子。

分析过程如下:

分析完题目后,我的思路是用一个整形数组记录下每个空格在字符串中的位置,然后倒序输出字符串各个空格间的单词即可。

需要注意输入的特殊及一般情况,要分三种情况讨论:

1.什么都没输入,即0空格0单词

2.只输入了一个单词,即0空格1单词

3.案例中的正常情况

分析完毕后,上代码:

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


using namespace std;

int main()
{

    int i,j=0,n=0,sum=0,locate;
    int b[81];
    char a[81];
    memset(a,0,sizeof(a));

    scanf("%[^\n]",a);
    n=strlen(a);

    for(i=0;i<n;i++)
    {
        if(a[i]==' ')
        {
            b[j++]=i;//j个空格,j+1个单词
        }

    }

    if(j==0&&n==0)//没空格没单词
    {
        sum=0;
    }
    else if(j==0&&n!=0)//没空格有单词,即一个
    {
        sum=1;
    }
    else//有空格有单词
    {
        sum=j+1;//sum记录单词个数
        j--;
    }



    if(j==0&&sum==1)//只有一个单词
    {
        for(i=0;i<n;i++)
        {
            printf("%c",a[i]);
        }
        sum=0;//只有一个单词的话输出完,下面while不用再循环了
    }
    else if(sum==j+2)//输出第一个单词
        {
            for(i=b[j]+1;i<n;i++)
            {
                printf("%c",a[i]);
            }
            locate=b[j];//记录空格位置,以便下一个使用,作为循环终止条件
            j--;
            sum--;
        }

    while(sum)
    {
        printf(" ");
        for(i=b[j]+1;i<locate;i++)
        {
            printf("%c",a[i]);
        }
        locate=b[j];//记录空格位置,以便下一个使用,作为循环终止条件
        j--;
        sum--;

        if(sum==0)//输出最后一个单词了
        {
          for(i=0;i<b[0];i++)
            {
                printf("%c",a[i]);
            }
        }
    }



    return 0;
}

PAT运行如图:

 觉得该篇文章有用的请不要忘记忘记点击右下角的大拇指~

欢迎大家关注我的公众号:Smooth前端成长记录
公众号同步更新CSDN博客内容,想方便阅读博客的C友可以来关注我的公众号以便获得更优良的阅读体验~

 

相关文章:

  • 图的深度遍历(邻接表)SCAU c++
  • 图的广度遍历(邻接表)SCAU c++
  • 堆排序 SCAU c++
  • 归并排序(非递归)超详细解答!!
  • PAT乙级 一元多项式求导(1010)详细解答c++
  • C语言课程设计物品竞拍管理(成品版!)
  • 折半查找判定树的画法(较简单易懂!)
  • 剑指 Offer 58 - I. 翻转单词顺序c++解法
  • 2. 两数相加 -力扣c++解法
  • 7.整数反转 - 力扣(LeetCode)
  • 1523. 在区间范围内统计奇数数目 -力扣
  • 9. 回文数 -力扣(leetCode)c++解法
  • 想要学会c++的STL?这一篇文章就足够啦!
  • 455. 分发饼干 -力扣(leetCode)c++贪心算法
  • 135. 分发糖果 -力扣(leetCode)c++贪心算法
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Hibernate【inverse和cascade属性】知识要点
  • Joomla 2.x, 3.x useful code cheatsheet
  • js算法-归并排序(merge_sort)
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • 包装类对象
  • 分布式熔断降级平台aegis
  • 前端临床手札——文件上传
  • 从如何停掉 Promise 链说起
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • # 安徽锐锋科技IDMS系统简介
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • (+4)2.2UML建模图
  • (4)STL算法之比较
  • (阿里云万网)-域名注册购买实名流程
  • (力扣)循环队列的实现与详解(C语言)
  • (转)详解PHP处理密码的几种方式
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET微信公众号开发-2.0创建自定义菜单
  • .net中的Queue和Stack
  • [20190113]四校联考
  • [23] GaussianAvatars: Photorealistic Head Avatars with Rigged 3D Gaussians
  • [AAuto]给百宝箱增加娱乐功能
  • [C++]unordered系列关联式容器
  • [CUDA手搓]从零开始用C++ CUDA搭建一个卷积神经网络(LeNet),了解神经网络各个层背后算法原理
  • [elastic 8.x]java客户端连接elasticsearch与操作索引与文档
  • [go] 策略模式
  • [hdu 4405] Aeroplane chess [概率DP 期望]
  • [HeMIM]Cl,[AeMIM]Br,[CeEIM]Cl,([HO-PECH-MIM]Cl,[HOOC-PECH-MIM]Cl改性酚醛树脂
  • [HITCON 2017]SSRFme perl语言的 GET open file 造成rce
  • [HJ56 完全数计算]
  • [ITIL学习笔记]之事件管理(2)
  • [J2ME]url请求返回参数非法(java.lang.illegalArgument)
  • [java基础揉碎]方法的重写/覆盖
  • [leetcode]Clone Graph
  • [MySQL FAQ]系列 -- 如何利用触发器实现账户权限审计
  • [Oh My C++ Diary]函数重载
  • [ruby on rails] ruby使用vscode做开发
  • [SAP] 解决程序提示被某用户使用或锁定的问题