当前位置: 首页 > news >正文

单词翻转(信息学奥赛一本通1144)

题目来源

信息学奥赛一本通(C++版)在线评测系统


题目描述

1144:单词翻转


时间限制: 1000 ms         内存限制: 65536 KB
提交数:60098    通过数: 26099

【题目描述】

输入一个句子(一行),将句子中的每一个单词翻转后输出。

【输入】

只有一行,为一个字符串,不超过500个字符。单词之间以空格隔开。

【输出】

翻转每一个单词后的字符串,单词之间的空格需与原文一致。

【输入样例】

hello world

【输出样例】

olleh dlrow

题目限制

一次遍历解题


思路分析

解题思路

  1. 输入处理

    • 首先,我们需要读取输入的句子,将其存储在一个字符串中。由于句子中可能包含空格,我们可以使用 getline 函数来读取整行输入。
  2. 单词分割与翻转

    • 遍历输入的字符串,通过空格来识别每个单词的边界。
    • 对于每个单词,我们可以使用双指针法进行翻转。具体来说,我们设置两个指针,一个指向单词的起始位置,另一个指向单词的结束位置,然后交换这两个指针所指向的字符,并将指针向中间移动,直到两个指针相遇。
  3. 输出结果

    • 完成所有单词的翻转后,将处理后的字符串输出。

具体代码

#include<iostream>
#include<string>
using namespace std;
int main()
{int left = 0, right = 0;string str; getline(cin, str);for (int i = 0; i <= str.size(); i++){if (str[i] == ' ' || i == str.size()){right--;while (left < right){swap(str[left++], str[right--]);}left = i + 1;right = i + 1;}else right++;}cout << str;
}

代码功能概述

这段代码的主要功能是对输入的一行字符串中的每个单词进行反转,同时保持单词在字符串中的顺序不变。例如,输入 "hello world",输出将是 "olleh dlrow"

代码逻辑详细解释

  1. 变量初始化

    • left 和 right 初始化为 0,它们将用于标记每个单词的起始和结束位置。
    • str 是用于存储用户输入的字符串,通过 getline(cin, str) 从标准输入读取一行字符串。
  2. 遍历字符串

    • 使用 for 循环遍历字符串,循环变量 i 从 0 到 str.size()(注意这里包含了 str.size() 这个边界,用于处理最后一个单词)。
    • 当遇到空格(str[i] == ' ')或者到达字符串末尾(i == str.size())时,说明一个单词结束。此时,right 减 1(因为之前 right 多走了一步),然后进入 while 循环,该循环用于反转当前单词。在 while 循环中,使用 swap 函数交换 left 和 right 位置的字符,并将 left 递增,right 递减,直到 left 不小于 right,完成单词的反转。
    • 反转完成后,更新 left 和 right 的值为 i + 1,即指向下一个单词的起始位置。
    • 如果当前字符不是空格,right 加 1,继续扩展当前单词的范围。
  3. 输出结果

    • 遍历结束后,所有单词都已反转,通过 cout << str; 输出处理后的字符串。
http://www.lryc.cn/news/528980.html

相关文章:

  • DeepSeek 模型全览:探索不同类别的模型
  • 我的2024年年度总结
  • DeepSeek回答人不会干出超出视角之外的事
  • 前端知识速记—JS篇:null 与 undefined
  • Hive:静态分区(分区语法,多级分区,分区的查看修改增加删除)
  • 升级到Mac15.1后pod install报错
  • 智慧园区管理系统为企业提供高效运作与风险控制的智能化解决方案
  • JxBrowser 8.2.2 版本发布啦!
  • LangChain的开发流程
  • AI在自动化测试中的伦理挑战
  • 《Origin画百图》之同心环图
  • TPA注意力机制详解及代码复现
  • 深入理解Java并发编程中的原子操作、volatile关键字与读写锁
  • HTML(快速入门)
  • SpringBoot Web开发(SpringMVC)
  • 汽车蓝牙钥匙定位仿真小程序
  • K8S中高级存储之PV和PVC
  • 【C语言进阶】- 动态内存管理
  • Python实现基于TD3(Twin Delayed Deep Deterministic Policy Gradient)算法来实时更新路径规划算法
  • pytorch实现半监督学习
  • 我的毕设之路:(2)系统类型的论文写法
  • LosslessScaling-学习版[steam价值30元的游戏无损放大/补帧工具]
  • concurrent.futures.Future对象详解:利用线程池与进程池实现异步操作
  • StarRocks 安装部署
  • Python Matplotlib库:从入门到精通
  • 线程概念、操作
  • 【PySide6拓展】QSoundEffect
  • 33【脚本解析语言】
  • 【Unity】 HTFramework框架(五十九)快速开发编辑器工具(Assembly Viewer + ILSpy)
  • 如何解决TikTok网络不稳定的问题