【寒假每日一题】DAY8 倒置字符串

news2024/9/19 10:33:51

牛客网链接:传送门

【❤️温馨提示】自己做一遍,再看解析效果更佳哟

描述
将一句话的单词进行倒置,标点不倒置。

输入描述:
每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100

输出描述:
依次输出倒置之后的字符串,以空格分割

示例1

输入:
I like beijing.

输出:
beijing. like I

思路:这题可以先逆序整个字符串,然后再分别逆序每一个单词;又或者还可以先逆序每一个单词,然后再逆序整个字符串。

那么这题我就先逆序字符串,再逆序每一个单词来讲解吧

第一步:根据题目要求输入字符串

第二步:逆序整个字符串

第三步:逆序每一个单词

第四步:输出数组a

详细过程下面

 第一步:根据题目要求输入字符串

首先,根据输入描述,输入的长度不能超过100,我们就不防多加一个

其次,因为scanf默认读到空格就不会再读取了,所以用gets。

#include <stdio.h>
int main()
{
    char arr[101];
    //输入字符串
    gets(arr);

    return 0;
}

第二步:逆序整个字符串

可以封装一个reverse函数专门来逆序,参数可以分别传数组的左下标和右下标,然后在函数内部对它们进行交换

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

void reverse(char* left, char* right)
{
    //当left < right说明还有元素可以交换
    while(left < right)
    {
        char tmp = *left;
        *left = *right;
        *right = tmp;
        left ++;
        right--;
    }
}

int main()
{
    char arr[101];
    //输入
    gets(arr);

    //逆序整个字符串
    int sz = strlen(arr); //求字符串长度
    reverse(arr,arr + sz - 1);

    return 0;
}

第三步:逆序每一个单词

逆序每一个单词确实头疼,但是我们还可以运用上一步reverse函数还帮助逆序,但需要分别找到单词的左下标和右下标。

        注意,千万不能移动arr,因为最后还要靠arr来输出字符串,所以可以用char* p来存放arr来代替arr移动,然后再用char* start = p来固定起始位置

        接下来让p往后判断,只要p不为空格并且p不等于“\0”就能完整找到一个单词,所以这是一个循环,如果最后单词不是“\0”结尾,说明还能找到单词,就让p继续向后走,所以这整体就是一个循环,其条件是让p到达“\0”位置就停下来,“\0”的asc码值为0.

【代码实现】

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

void reverse(char* left, char* right)
{
    //当left < right说明还有元素可以交换
    while(left < right)
    {
        char tmp = *left;
        *left = *right;
        *right = tmp;
        left ++;
        right--;
    }

}

int main()
{
    char arr[101];
    //输入
    gets(arr);

    //逆序整个字符串
    int sz = strlen(arr); //求字符串长度
    reverse(arr,arr + sz - 1);

    //逆序每一个单词
    char* p = arr;

    while(*p) //若*p == '\0','\0'的ASC码为0,则会跳出循环
    {
        char* start = p;

        while(*p != ' ' && *p != '\0')
        {
            p++;
        }  
        //当*p为空格跳出循环,p指向的就是空格,所以p - 1
        reverse(start,p - 1);
        if (*p != '\0')
        {
            p++;
        }
    }

    return 0;
}

第四步:输出数组a

【完整代码】

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

void reverse(char* left, char* right)
{
    //当left < right说明还有元素可以交换
    while(left < right)
    {
        char tmp = *left;
        *left = *right;
        *right = tmp;
        left ++;
        right--;
    }

}

int main()
{
    char arr[101];
    //输入
    gets(arr);

    //逆序整个字符串
    int sz = strlen(arr); //求字符串长度
    reverse(arr,arr + sz - 1);

    //逆序每一个单词
    char* p = arr;

    while(*p)
    {
        char* start = p;

        while(*p != ' ' && *p != '\0')
        {
            p++;
        }  
        reverse(start,p - 1);
        if (*p != '\0')
        {
            p++;
        }
    }
    //输出数组a
    printf("%s\n",arr);
    
    return 0;
}

最后这题也是完美AC啦!

总结:这题难点在于如何逆序单词。

 2023年1月16日

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/165864.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Open3D 点云投影至指定平面(Python版本)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 假设给定的平面为 a x + b y + c z + 1 = 0 ax+by+cz+1=0

Python基础(二十四):面向对象核心知识

文章目录 面向对象核心知识 一、面向对象三大特性 1、封装 2、继承 3、多态

音频音量调整中的ramp up down

在日常生活中不管是打电话还是听音乐&#xff0c;都会遇到音量不合适而去调整音量的情况。如果音量调整软件处理不好&#xff0c;就会听到pop noise。产生pop noise的原因是音量直接从当前值骤变到目标值&#xff0c;而不是缓慢的变。如果缓慢的变就不会有pop noise了。图1显示…

select for update是行锁还是表锁,还真得看情况

背景 看到许多写select for update是行锁还是表锁的文章&#xff0c;但每篇文章的结论好像都不太一样。同时&#xff0c;是行锁还是表锁的问题直接影响着系统的性能&#xff0c;所以特意为大家调研一番&#xff0c;也就有了本篇文章&#xff0c;一共为大家汇总验证了20个场景下…

MES系统选型攻略,优秀MES系统应具备哪些性质

在众多MES系统中&#xff0c;企业怎样才能找到最适合自己的产品&#xff1f;那么&#xff0c;一套高质量的MES系统&#xff0c;究竟有什么特点&#xff1f;随着全球经济一体化的发展&#xff0c;中美两国之间的贸易战争日趋白热化&#xff0c;中国作为一个生产大国&#xff0c;…

行为型模式 - 迭代器模式iterator

模式的定义与特点 迭代器模式&#xff08;iterator Pattern&#xff09;&#xff0c;为的提是可以顺序访问一个聚集中的元素而不必暴露聚集的内部表象。多个对象聚在一起形成的总体称之为聚集&#xff0c;聚集对象是能够包容一组对象的容器对象。迭代子模式将迭代逻辑封装到一个…

ffmpeg源码编译vs2013版本

完整版安装ffmpeg 一、安装choco 1.Set-ExecutionPolicy AllSigned 2.Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.N…

链队基本操作(笔记版)

本节主要针对链栈的基本操作进行解析。 # coding:___utf-8___ # author:Guoxuan Sun time:2023/1/12 #链栈的基本操作 #链栈的创建与顺序栈的区别就是每个结点都有一个指针域 #同时链栈也是有两个指针front和rear #链栈中的front指针指向的结点是第一个结点&#xff0c;不是空…

关于MySQL中的存储引擎

存储引擎&#xff1a;&#xff08;了解内容&#xff09; 1、什么是存储引擎&#xff0c;有什么用&#xff1f; 存储引擎是mysql中特有的一个术语&#xff0c;其他数据库中没有。 存储引擎就是一个表存储/组织数据的方式。不同的存储引擎&#xff0c;表存储数据的方式不同。 目前…

基于Androidstudio的宠物交友app

需求信息&#xff1a; 客户端&#xff1a; 1&#xff1a;登录注册&#xff1a;用户可以通过自己的信息进行账号的注册 2&#xff1a;宠物信息&#xff1a;列表显示发布的宠物想&#xff0c;可以通过条件对宠物信息进行筛选&#xff0c;以及沟通意向点亮 3&#xff1a;宠物圈&am…

java调用python文件的几种方式

java调用python的契机来自于一个项目需要用到算法&#xff0c;但是算法工程师们写的python&#xff0c;于是就有了java后端调用python脚本的需求&#xff0c;中间遇到了许多问题&#xff0c;特此记录整理了一次。1、java调用python的方式有哪几种1.1 方法一&#xff1a;jpython…

选择排序.

一、简单选择排序 void select_sort(int a[], int len){ //len为数组长度for (int i 0; i < len-1; i){//n个数需要比较n-1趟int min i;//记录最小值的位置for (int j i1; j < len-1; j){if (a[j] < a[min]) min j;//更新最小值的位置} if (min ! i) swap(a[i], …

vue3 项目篇商场 之 初始化项目

目录vue3 项目篇商场 之 初始化项目1&#xff1a;安装 rem 适配src 同级目录下创建 postcss.config.jsmain.ts2 :使用字体图标加字体图标 &#xff08; Symbol 这个选项&#xff09;public / index.html使用效果3 sass4&#xff1a;vant3引入 按需引入 ( 非 vite )4-1 babel.co…

2022年,开源社最亮的星

开源社成立于 2014 年&#xff0c;是由志愿贡献于开源事业的个人成员&#xff0c;依 “贡献、共识、共治” 原则所组成&#xff0c;始终维持厂商中立、公益、非营利的特点&#xff0c;是最早以 “开源治理、国际接轨、社区发展、开源项目” 为使命的开源社区联合体。本次年度评…

常用的专业数据恢复软件有哪些?恢复数据就看这10个!

互联网时代&#xff0c;我们都习惯使用电脑来进行办公&#xff0c;电脑里面都保存着我们很多数据。数据的日积月累&#xff0c;会导致电脑的运行速度减缓&#xff0c;为此我们都会定期对电脑进行清理。 如果在清理过程中&#xff0c;不小心误删或者格式化了数据&#xff0c;有…

漏洞挖掘之信息收集

简介 对单一指定目标网站进行黑盒测试&#xff0c;最重要的就是信息收集&#xff0c;因为网站管理员肯定会在用户经常访问的主网站进行经常维护&#xff0c;而那些子域名&#xff0c;没有什么人访问的&#xff0c;可能就会忘记维护&#xff0c;挖洞的突破点大都在于子域名上&am…

Android/Linux 子系统Graphics图形栈入门普法介绍

Android/Linux 子系统Graphics图形栈入门普法介绍 写在最前面 由于工作原因&#xff0c;最近在公司做了一个关于Android/Linux 子系统Graphics图形栈入门相关知识的培训介绍&#xff0c;个人感觉对于想要了解入门这块的朋友还是有一定帮助的。由于博客不能直接放入ppt&#xff…

Spring AOP源码:代理的创建过程

前言 上篇文章讲解了AOP解析工作&#xff0c;将配置文件解析并封装成beanDefinition&#xff0c;由于配置文件中有5个通知方法&#xff0c;before、after、around、after-returning、after-throwing&#xff0c;这里会将其解析成5个advisor通知类。 <?xml version"1…

opencv——图像阈值设定及常见的滤波操作

1、图像阈值ret,dstcv2.threshold(src,thresh,maxval,type)src:输入图&#xff0c;只能是单通道图&#xff0c;也就是灰度图。thresh:阈值。maxval:当像素超过了阈值&#xff0c;所赋予的值。type:二值化操作的类型&#xff0c;包括binary&#xff0c;binary_iny,trunc,tozero,…

Python编程 闭包

作者简介&#xff1a;一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;b网络豆的主页​​​​​​ 目录 前言 一.闭包 1.什么是闭包 前景引入&#xff1a; 2.闭包的定义需要满足以下…