字符串操作(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;
}
posted @   零食抱佛脚  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示