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++实现LeetCode(162.求数组的局部峰值)

    C++实现LeetCode(162.求数组的局部峰值)

    这篇文章主要介绍了C++实现LeetCode(162.求数组的局部峰值),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++实现折半查找

    C++实现折半查找

    这篇文章主要为大家详细介绍了C++实现折半查找,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • C++ 组合 (Composition)的介绍与实例

    C++ 组合 (Composition)的介绍与实例

    这篇文章主要给大家介绍了关于C++ 组合(Composition)的相关资料,组合就是将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。需要的朋友可以参考下
    2021-05-05
  • C语言实现纸牌计算24点小游戏

    C语言实现纸牌计算24点小游戏

    这篇文章主要为大家详细介绍了C语言实现纸牌计算24点小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • C语言选择、循环、函数、数组与操作符

    C语言选择、循环、函数、数组与操作符

    这篇文章主要介绍了C语言选择、循环、函数、数组与操作符,文章基于C语言展开对主题的详细介绍,下文内容需要的小伙伴可以参考一下
    2022-04-04
  • VScode上配置 c语言环境的图文教程

    VScode上配置 c语言环境的图文教程

    这篇文章主要介绍了配置VScode c语言环境,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • OpenCV实现图像切割功能

    OpenCV实现图像切割功能

    这篇文章主要为大家详细介绍了OpenCV实现图像切割功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • C++单例设计模式详细讲解

    C++单例设计模式详细讲解

    单例模式(Singleton Pattern)是最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式,这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建
    2022-06-06
  • C++ 11新特性之右值引用使用案例与应用场景

    C++ 11新特性之右值引用使用案例与应用场景

    右值引用和move语义是C++ 11中重要的特性之一,可以提高程序的效率和性能,右值引用是一种新的引用类型,下面这篇文章主要给大家介绍了关于C++ 11新特性之右值引用使用案例与应用场景的相关资料,需要的朋友可以参考下
    2024-01-01
  • C++超集C++/CLI模块的基本语法

    C++超集C++/CLI模块的基本语法

    这篇文章介绍了C++超集C++/CLI模块的基本语法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07

最新评论