P10058 Reverse and Rotate(疑问)——洛谷

文章讲述了如何在C++中处理一个ASCII字符串S,根据一系列操作(包括向左/右循环移动指定位数和翻转)进行变换,最终输出操作后的字符串。遇到的问题是程序在输入时卡住,可能涉及到数组大小、输入处理或代码逻辑错误。
摘要由CSDN通过智能技术生成

题目描述

给定一个字符串 �S 和 �n 次操作,每次操作为以下 33 种形式之一:

  1. < x 表示将 �S 向左循环移动 �x 位。例如:�����abcde 执行 < 2 后变成 �����cdeab。

  2. > x 表示将 �S 向右循环移动 �x 位。例如:�����abcde 执行 > 2 后变成 �����deabc。

  3. rev 表示将 �S 翻转。例如:�����abcde 执行 rev 后变成 �����edcba。

求 �S 在依次执行这 �n 次操作后得到的字符串 �′S′。

输入格式

第一行一个字符串 �S。

第二行一个整数 �n。

接下来 �n 行,每行一个操作。

输出格式

一行一个字符串 �′S′,表示依次执行 �n 次操作后得到的字符串。

输入输出样例

输入 #1复制

abcde
3
> 2
rev
< 2

输出 #1复制

aedcb

说明/提示

【样例 1 解释】

  • 原字符串为 �����abcde;
  • 第一次操作后,字符串变为 �����deabc;
  • 第二次操作后,字符串变为 �����cbaed;
  • 第三次操作后,字符串变为 �����aedcb。

【数据规模与约定】

记 ∣�∣∣S∣ 表示字符串 �S 的长度。

测试点编号特殊性质
1∼31∼3∣�∣,�,�≤1000∣S∣,n,x≤1000
44没有 rev 操作
55�=��...���...�S=aa...abb...b
6∼106∼10

对于 100%100% 的数据,1≤∣�∣,�≤1061≤∣S∣,n≤106,0≤�≤1090≤x≤109,�S 仅由小写字母组成。

代码:

#include<bits/stdc++.h>
#include<string>
using namespace std;
char c[100];//[1000000010];
int main(){
    string a,b;//,c;
    int num;
//    char c[5];
    int i,j;
    int n;
    cin>>a;
    //cout<<a<<endl;
    cin>>n;
    //cout<<n;
    b=a;
    int len1=a.length(),len2;
    while(n--){
        getchar();
        num=0;
        scanf("%[^\n]",c);//scanf("%c%c%s",&c[0],&c[1],&Num);//gets(c);
        //cout<<c;
        if(c[0]!='r'){//算出移动位数 
            len2=strlen(c);//c.length();
            for(i=2;i<len2;i++)
                num=num*10+c[i]-'0';
        }    
        if(c[0]=='>'){//右移 
            if(num%len1==0) continue;//不用移动 
            for(i=len1-num%len1,j=0;i<len1;i++,j++){
                b[j]=a[i];
            }
            for(i=0;i<len1-num%len1;j++,i++){
                b[j]=a[i];
            }
        }
        else if(c[0]=='<'){
            if(num%len1==0) continue;
            for(i=num%len1,j=0;i<len1;i++,j++){
                b[j]=a[i];
            }
            for(i=0;i<num%len1;i++,j++){
                b[j]=a[i];
            }
        }
        else{
            for(i=len1-1;i>=0;i--){
                b[len1-1-i]=a[i];
            }
        }
        a=b;
        //cout<<b<<endl;
    }
    cout<<a;


疑问:

调试调到输入光标就停在那里,不知道干嘛……又不是数组开大了,设置了多个断点也不行

其实我感觉是可以的,应该没错吧,最多超时或者数组不够啥的,结果一个点也没过,也没测试数据啥的……

c++用不了gets(),dev那gets_s()也不行。然后移动位数也不一定是个位数

string类的话用不了字符串的函数

嗐,得认真一点了,之几天都在堆积问题,没有解决问题(光拉屎不递纸),花的时间也少,得好好学了,加油!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值