字符串操作(1)
题目P10058
这道题要求对字符串进行指定的操作:循环移动和翻转
因为要输出操作后的字符串,所以我们不妨在原字符串的基础上进行操作
考虑移动:
因为只需要输出最后一次,所以不难想到我们可以记录最后输出的字符串的第一位在哪里,
那么我们就可以定义一个x来储存当前位置,定义一个a储存移位个数
例如题目要求>2,此时
x+=a
如果是<12,那么要先取余再加
x+=a%s.size()
如果是>12,那么要注意x可能会变为负数,所以要
x-=a%s.size()
x+=s.size()
当然x可能会超过字符串长度,所以要在每次移动后加上
x%=s.size()
所以每次移动操作应该是这样的
点击查看代码
string ss; int a; cin>>ss; if(ss=="<") { cin>>a; x+=a%s.size(); x%=s.size(); } if(ss==">") { cin>>a; x-=a%s.size(); x+=s.size(); x%=s.size(); }
考虑翻转:
这个只需要用一个c记录反向次数,当c==1时带表翻转奇数次,
此时应该用reverse翻转一下,最后输出即可。
AC代码
点击查看代码
#include<bits/stdc++.h> using namespace std; string s; int n,x,c; int main() { cin>>s>>n; for(int i=1;i<=n;i++) { string ss; int a; cin>>ss; if(ss=="<") { cin>>a; x+=a%s.size(); x%=s.size(); } if(ss==">") { cin>>a; x-=a%s.size(); x+=s.size(); x%=s.size(); } if(ss=="rev") { x=s.size()-x; c=(c==1?0:1); } } if(c) reverse(s.begin(),s.end()); for(int i=x;i<s.size();i++) cout<<s[i]; for(int i=0;i<x;i++) cout<<s[i]; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理