前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >字符串变形 C++

字符串变形 C++

作者头像
叶茂林
发布2023-07-30 10:35:02
1750
发布2023-07-30 10:35:02
举报
文章被收录于专栏:叶子的开发者社区

题目描述

对于一个长度为 n 字符串,我们需要对它做一些变形。

首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把这个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。

比如"Hello World"变形后就变成了"wORLD hELLO"。

数据范围: 1\le n \le 10^61≤n≤106 , 字符串中包括大写英文字母、小写英文字母、空格。

进阶:空间复杂度 O(n)O(n) , 时间复杂度 O(n)O(n)

输入描述:

给定一个字符串s以及它的长度n(1 ≤ n ≤ 10^6)

返回值描述:

请返回变形后的字符串。题目保证给定的字符串均由大小写字母和空格构成。

思路分析

要看清楚题目说的是将单个单词里面的字母顺序,而不是将这个字符串里面的单词的顺序颠倒。

因为C++的算法库里面有reverse函数,它的作用就是将整个字符串的字符顺序颠倒过来,所以我的思路比较大众化,为将单词里面的字母顺序颠倒,首先用reverse函数将整个字符串的字符顺序颠倒,然后,用空格作为字符串划分单词的判断点,对每一个由空格隔开的部分(即单词)再次使用reverse函数颠倒。

为了方便,我尽可能地调用库函数,像判断字母大小写,字符串的长度之类的。

我里面还用到了auto变量,auto变量属实好用。

AC代码

代码语言:javascript
复制
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main(){
	string s;
	int n,i,j;
	getline(cin,s);
	cin>>n;
	for(auto& element:s){
		if(isupper(element))
		element+=32;
		else if(islower(element))
		element-=32;
	}
	reverse(s.begin(),s.end());
	for(i=0;i<n;i++){
		for(j=i;j<n;j++)
		if(s[j]==' ')
		break;
		reverse(s.begin()+i,s.begin()+j);
		i=j;
	}
	cout<<s;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 思路分析
  • AC代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档