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

编辑: admin 分类: c#语言 发布时间: 2021-12-12 来源:互联网
目录

    在这里插入图片描述

    这道题,是我遇见对数组元素的掌握与使用较为灵活的题目。
    下面代码是我刚接触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语言倒序的资料请关注海外IDC网其它相关文章!

    【原URL http://www.yidunidc.com/kt.html 转载请说明出处】