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

单词翻转(信息学奥赛一本通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.kler.cn/a/526149.html

相关文章:

  • Java 知识速记:全面解析 final 关键字
  • ARM嵌入式学习--第十天(UART)
  • Leetcode刷题-不定长滑动窗口
  • 基于Django的个人博客系统的设计与实现
  • (Java版本)基于JAVA的网络通讯系统设计与实现-毕业设计
  • Hive:日志,hql运行方式,Array,行列转换
  • SpringBoot 原理分析
  • 智慧园区管理系统为企业提供高效运作与风险控制的智能化解决方案
  • 园区管理智能化创新引领企业效能提升与风险控制新趋势
  • LabVIEW微位移平台位移控制系统
  • 【hot100】刷题记录(7)-除自身数组以外的乘积
  • 如何构建树状的思维棱镜认知框架
  • 为什么“记住密码”适合持久化?
  • 架构知识整理与思考(其四)
  • 从零搭建一个Vue3 + Typescript的脚手架——day3
  • LeetCode:63. 不同路径 II
  • 在K8s中部署动态nfs存储provisioner
  • 基于 Redis GEO 实现条件分页查询用户附近的场馆列表
  • React第二十八章(css modules)
  • 在彼此的根系里呼吸
  • OpenEuler学习笔记(十七):OpenEuler搭建Redis高可用生产环境
  • V103开发笔记1-20250113
  • 类文件结构
  • Baklib如何提升企业知识管理效率与市场竞争力的五大对比分析
  • FFmpeg rtmp推流直播
  • 道氏理论简介