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++中的实现,组合模式可以清晰地反映出递归构建树状的组合结构,需要的朋友可以参考下
    2016-03-03
  • 常用的C语言排序算法(两种)

    常用的C语言排序算法(两种)

    本文给大家分享两种常用的C语言排序算法,代码非常简单,感兴趣的朋友可以参考下
    2016-09-09
  • 详解C++中的isunordered函数

    详解C++中的isunordered函数

    这篇文章主要介绍了C++中的isunordered函数,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • 基于Matlab制作一款简单的龙舟小游戏

    基于Matlab制作一款简单的龙舟小游戏

    这篇文章主要为大家介绍如何利用Matlab制作一款简单的龙舟小游戏,文中的示例代码讲解详细,对我们学习Matlab有一定帮助,需要的可以参考一下
    2022-03-03
  • C++的cout.tellp()和cout.seekp()语法介绍

    C++的cout.tellp()和cout.seekp()语法介绍

    无论是使用 cout 输出普通数据,用 cout.put() 输出指定字符,还是用 cout.write() 输出指定字符串,数据都会先放到输出流缓冲区,待缓冲区刷新,数据才会输出到指定位置,本文给大家介绍一下C++的cout.tellp()和cout.seekp()语法,需要的朋友可以参考下
    2023-09-09
  • 详解C语言之缓冲区溢出

    详解C语言之缓冲区溢出

    缓冲区是一块连续的计算机内存区域,可保存相同数据类型的多个实例。缓冲区可以是堆栈、堆和静态数据区。在C/C++语言中,通常使用字符数组和malloc/new实现缓冲区。溢出指数据被添加到分配给该缓冲区的内存块之外。缓冲区溢出是最常见的程序缺陷
    2021-06-06
  • C++中string的模拟实现

    C++中string的模拟实现

    这篇文章主要为大家详细介绍了C++中string的模拟实现,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • C++利用链表模板类实现简易队列

    C++利用链表模板类实现简易队列

    这篇文章主要为大家详细介绍了C++利用链表模板类实现一个简易队列,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • C++ 整型与字符串的互转方式

    C++ 整型与字符串的互转方式

    今天小编就为大家分享一篇C++ 整型与字符串的互转方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 从汇编看c++中函数里面的static关键字的使用说明

    从汇编看c++中函数里面的static关键字的使用说明

    c++中的static关键字使得函数里面的局部变量的存活期不在局限于函数里面,而是变为在整个程序生命期里面都有效
    2013-05-05

最新评论