剑指offer--面试题58.翻转字符串

news2025/1/11 7:03:19

题目描述

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串”I am a student.“,则输出”student. a am I“。

算法分析

在这里插入图片描述

完整代码


#include <string.h>
//把起始地址pBegin到结束地址pEnd的字符翻转
void Reverse(char* pBegin, char* pEnd)
{
    char tmp;
    while (pBegin < pEnd)
    {
        tmp = *pBegin;
        *pBegin = *pEnd;
        *pEnd = tmp;
        pBegin++;
        pEnd--;
    }
}
//算法:把整个字符串翻转,然后再把每个单词翻转
//"I am a student."->".tneduts a ma I"->"student. a am I"
void ReverseSentence(char* pData)
{
    if (pData == NULL)
        return  ;
    int len = strlen(pData);
    //把整个字符串翻转
    Reverse(pData,pData+len-1);//'\0'不能翻转到前面,不能动

    char* pBegin = pData;
    char* pEnd = pData;

    //翻转每个单词
    while (*pBegin != '\0')
    {
        if (*pBegin == ' ')//跳过' '
        {
            pBegin++;
            pEnd++;
        }
        else if (*pEnd == ' ' || *pEnd=='\0')//不是空格开始,但结尾遇到空格,这个单词结束了
        {
            Reverse(pBegin, pEnd - 1);//空格不交换
            pBegin = pEnd;
        }
        else
            pEnd++;
    }
}

int main()
{
    char str[] = "I am a student.";
    ReverseSentence(str);
    printf("%s\n",str);

    return 0;
}

利用C++实现,代码如下:

string reverseWords(string s) {
    //原字符串反转
    reverse(s.begin(), s.end());
    //构造新字符串(新字符串+=原字符串的一个单词反转 +' ')
    string s1;
    //把每个单词再反转一次
    auto p1 = s.begin();//单词的开头
    auto p2 = s.begin();//单词的尾后
    while (p1 != s.end()) {
        while (p1!=s.end() && *p1 == ' ') //跳过前面的空格
        {
            p1++;
            p2++;
        }
        if (p1 == s.end())
            break;
        while (p2 != s.end() && *p2 != ' ')//找单词的结尾后一个    
            p2++;    
        
        string tmp(p1, p2);    
        reverse(tmp.begin(), tmp.end());    
        
        s1 += tmp;    
        s1 += ' ';    
        p1 = p2;    
    }
    //删除最后的空格    
    s1.erase(s1.end() - 1);    
    return s1;    
}

本篇完!

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

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

相关文章

html+css+js网页设计 作业歌帝梵官网首页1个页面6个js效果

htmlcssjs网页设计 作业歌帝梵官网首页1个页面6个js效果 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获…

安卓主板_MTK联发科主板定制开发|PCBA定制开发

MTK联发科安卓主板&#xff0c;采用MT6762八核平台方案&#xff0c;支持谷歌Android 11.0系统&#xff0c;MT6762采用ARM八核A53内核芯片、主频高达2.0GHz&#xff0c;GPU采用ARM PowerVR GE8329650MHZ&#xff0c;支持主流19201080分辨率&#xff0c;支持硬解H.264&#xff0c…

Typora使用教程-修改配置文件-免费使用

Typora特点 简洁美观&#xff1a;Typora的界面非常简洁&#xff0c;没有繁琐的菜单和工具栏&#xff0c;只有一个干净的编辑窗口。它使用 Markdown语法&#xff0c;将文本转化为漂亮的排版&#xff0c;无需关注样式和格式的细节。所见即所得&#xff1a;Typora实时显示Markdow…

希尔排序,详细解析(附图解)

1.希尔排序思路 希尔排序是一种基于插入排序的算法&#xff0c;通过将原始数据分成若干个子序列&#xff0c;然后对子序列进行插入排序&#xff0c;逐渐减小子序列的间隔&#xff0c;最后对整个序列进行一次插入排序。 1.分组直接插入排序&#xff0c;目标接近有序--------…

「Unity3D」属性面板(Inspector)上增删操作,序列化的Dictionary对象的k-v数值

Unity无法序列化Dictionary对象&#xff0c;可以通过实现ISerializationCallbackReceiver接口&#xff0c;来自定义实现&#xff0c;即&#xff1a;搞一个key list和一个value list分别存储dict的k-v&#xff0c;于是属性面板上就会显示&#xff0c;k-v的两个列表。 但这会有一…

【鸿蒙基础系列】鸿蒙基础组件

&#x1f41f;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢编程&#x1fab4; &#x1f421;&#x1f419;个人主页&#x1f947;&#xff1a;Aic山鱼 &#x1f420;WeChat&#xff1a;z7010cyy &#x1f988;系列专栏&#xff1a;&#x1f3de;️ 前端-JS基础专栏✨前…

stm32智能颜色送餐小车(红外光管避障)

大家好啊&#xff0c;我是情谊&#xff0c;今天我们来介绍一下我最近设计的stm32产品&#xff0c;我们在今年七月份的时候参加了光电设计大赛&#xff0c;我们小队使用的就是stm32的智能送餐小车&#xff0c;虽然止步于省赛&#xff0c;但是还是一次成长的经验吧&#xff0c;那…

Sql与Rce注入相关漏洞复现

目录 sqli-labs注入第38&#xff0c;48关 第38关&#xff08;单引号闭合&#xff09; ​编辑 第48关 (GET请求-基于错误-盲注-数字型-order by 排序 ​编辑 贷齐乐系统多处Sql注入漏洞 环境搭建 将贷齐乐源码放入phpstudy中的www目录下 在phpstudy上创建网站&#xff1…

DevEcoStudio对Gitee进行变基与合并

当尝试将本地分支的更改推送到远程仓库&#xff0c;但是远程仓库中的该分支已经有了您本地分支中没有的提交时&#xff0c;会出现这个提示。 具体来说&#xff0c;这个提示意味着&#xff1a; 推送被拒绝&#xff1a;不能直接将更改推送到远程仓库&#xff0c;因为远程仓库中…

WeNet模型学习笔记

WeNet是一个端到端语音识别模型&#xff0c;由于其优越的特性&#xff0c;成为近几年语音识别领域的热门模型。WeNet模型是一种CTC和attention结构的混合体&#xff0c;以Conformer或Transformer作为encoder&#xff0c;并使用attention decoder对CTC的输出进行重新打分(rescor…

微信小程序用 pinia数据化存储信息

import { defineStore } from pinia import { ref } from vue import type {LoginResult} from /types/member //定义 Store export const useMemberStore defineStore( member, () > { // 会员信息 const profile ref<LoginResult>() //保存会员信息&#xff0c…

MySQL数据库:详细安装与配置指南

目录 背景: 一.下载过程(MySQL数据库): 二.安装过程(MySQL数据库)&#xff1a; 三.验证MySQL是否安装成功 背景: MySQL 是一个流行的开源关系数据库管理(RDBMS)&#xff0c;由瑞典MySQL AB公司开发&#xff0c;后俩该公司被Sun Microsystems收购&#xff0c;Sun Microsyste…

el-table的多选功能

html&#xff1a; <el-table :data"list" row-key"id" selection-change"handleSelectionChange"><el-table-column type"selection" width"55"/> </el-table> js变量&#xff1a; data () {return {/…

日期类代码实现-C++

一、目标 通过前面对类和对象的介绍我们可以自己通过C代码初步实现一个简单的日期类。 实现的主要操作有&#xff1a; 1.日期类的构造函数 2.日期类的拷贝构造函数&#xff08;在头文件中实现&#xff09; 3.日期类的比较运算符重载 4.日期类的计算运算符重载 5.流插入运…

Python 爬数据案例 客户端服务端http请求 推荐 【进阶篇 2 】

网络爬虫数据原来这么简单&#xff01;&#xff01;&#xff01; 前面已经总结了关于python的面向对象继承多态的知识&#xff0c;这里主要是模块、读写文件、http请求网络数据以及如何获取网络数据知识。 网络爬虫是典型的应用程序&#xff0c;它的工作原理就是通过不断的请…

VBA语言専攻T3学员领取资料通知0817

T3学员领取资料通知0817 各位学员∶本周MF系列VBA技术资料增加681-690讲&#xff0c;T3学员看到通知后请免费领取,领取时间8月16日晚上19:00-8月17日中午12:00。本次增加内容&#xff1a; MF691:按所选范围对行进行分组显示 MF692:查找所给范围内的重复项 MF693:文本框Text…

python非交互连接mysql+mycat读写分离实现

python非交互连接mysql >>>import pymysql >>>connpymysql.connect(host"192.168.118.57",port3306,database"test",user"root",password"root") >>> cursorconn.cursor() >>> cursor.execut…

基于springboot的智能家居系统

TOC springboot198基于springboot的智能家居系统 研究背景与现状 时代的进步使人们的生活实现了部分自动化&#xff0c;由最初的全手动办公已转向手动自动相结合的方式。比如各种办公系统、智能电子电器的出现&#xff0c;都为人们生活的享受提供帮助。采用新型的自动化方式…

day22 Java基础——方法(干货)

day22 Java基础——方法 在Java中&#xff0c;方法是一段组织好的、可重复使用的代码块&#xff0c;用于执行一个特定的操作。方法提供了一种封装代码的方式&#xff0c;使得代码模块化&#xff0c;便于管理和重用。以下是关于Java中方法的一些基本介绍&#xff1a; 文章目录…

对话图像编辑研究综述

MGIE&#xff1a;MLLM 引导图像编辑&#xff08;ICLR 2024&#xff09; https://mllm-ie.github.io/ 利用 MLLM 来增强基于指令的图像编辑 (“what will this image be like if [instruction]” &#xff0c;来重写)。 训练好后&#xff0c;大视觉语言模型直接推导出简洁明确…