PTA刷题C语言编程顺序颠倒输出实现

 更新时间:2021年09月17日 15:11:02   作者:Booksort  
本篇文章是在刷PTA题目是遇到的一道题,给定一句话,要求将句中所有单词顺序颠倒输出,本文来带你解答,有需要的朋友可以借鉴参考下

在这里插入图片描述

这道题,是我遇见对数组元素的掌握与使用较为灵活的题目。
下面代码是我刚接触C++,刚学完类的一系列知识,连入门都没过,对C++的强大还未有多大认知,还是极具C语言的风格。

我看过一篇用C++完成的比这个简单多了。

C语言也可以用栈来完成,虽然我有栈的实现函数,但我不愿去搞,就这样吧,实现也是对自己知识点掌握的加深认知。

#include <iostream>
#include <cstring>
int main(void)
{
    int a = 0;
    char ch;
    char arr1[500001];//输入数组
    char arr2[500001];//输出数组
    while ((ch = getchar()) != '\n')//读入字符串
    {
        arr1[a++] = ch;
    }
    arr1[a] = '\0';
    int len = strlen(arr1);
    int i = 0;
    int dest = len - 1;//从字符串尾部开始遍历
    while (dest >= 0)
    {
        if (arr1[dest] == ' ' && arr1[dest + 1] != ' ' && arr1[dest + 1] != '\0' || (dest == 0 && arr1[0] != ' '))//元素为单词的条件
        {
            if (i != 0)
                arr2[i++] = ' ';
            int last = dest + 1;
            if (dest == 0 && arr1[0] != ' ')//满足条件,改变last的值
            {
                last = dest;
            }
            while (arr1[last] != ' ' && arr1[last] != '\0')//将单词拷贝到输出数组中
            {
                arr2[i++] = arr1[last++];
            }
        }
        dest--;
    }
    arr2[i] = '\0';//字符串结束
    std::cout << arr2 << std::endl;
    return 0;
}

尽量理解吧

arr1[dest] == ' ' && arr1[dest + 1] != ' '&&arr1[dest+1]!='\0'

是为了确定每个单词出现的条件。

(dest == 0 && arr1[0] != ' ')

是为了处理第一个元素就是单词的情况。

while (arr1[last] != ' ' && arr1[last] != '\0')
            {
                arr2[i++] = arr1[last++];
            }

负责将单词拷贝到输出数组上,同时符号要求。

if(i!=0)
  arr2[i++] = ' ';

这个是,当第一个单词拷贝过去后,判断是否后面还有有单词,且能进这个域,就代表后面还有单词,要加一个空格的元素。

以上就是PTA刷题C语言编程顺序颠倒输出实现的详细内容,更多关于PTA刷题C语言倒序的资料请关注脚本之家其它相关文章!

相关文章

  • C++实现简易贪吃蛇游戏

    C++实现简易贪吃蛇游戏

    这篇文章主要为大家详细介绍了C++实现简易贪吃蛇游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C++中int类型按字节打印输出的方法

    C++中int类型按字节打印输出的方法

    这篇文章主要给大家介绍了关于C++中int类型按字节打印输出的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • 解决vscode下调试c/c++程序一闪而过的问题(Windows)

    解决vscode下调试c/c++程序一闪而过的问题(Windows)

    这篇文章主要介绍了解决vscode下调试c/c++程序一闪而过(Windows),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • C/C++ assert()函数用法案例总结

    C/C++ assert()函数用法案例总结

    这篇文章主要介绍了C/C++ assert()函数用法案例总结,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • Qt线程池QThreadPool的使用详解

    Qt线程池QThreadPool的使用详解

    本文主要介绍了Qt线程池QThreadPool的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • C++实现自底向上的归并排序算法

    C++实现自底向上的归并排序算法

    这篇文章主要介绍了C++实现自底向上的归并排序算法,结合实例形式较为详细的分析总结了自底向上的归并排序算法的原理与具体实现技巧,需要的朋友可以参考下
    2015-12-12
  • 队列的动态链式存储实现代码分享

    队列的动态链式存储实现代码分享

    DynaLnkQueue.cpp - 动态链式队列,即队列的动态链式存储实现
    2014-02-02
  • C++实现LeetCode(28.实现strStr()函数)

    C++实现LeetCode(28.实现strStr()函数)

    这篇文章主要介绍了C++实现LeetCode(28.实现strStr()函数),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++实现转置矩阵的循环

    C++实现转置矩阵的循环

    大家好,本篇文章主要讲的是C++实现转置矩阵的循环,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2022-01-01
  • C 语言基础之C语言的常见关键字

    C 语言基础之C语言的常见关键字

    C语言中有一些预先定义的字符串,他们本身被赋予了自身的功能。并且我们在定义变量的时候,不能去抢他们的名字来用。他们就是今天的主角:关键字,下面文章将给大家做详细介绍
    2021-09-09

最新评论