p1060 字符数组

版权声明:https://blog.csdn.net/huashuimu2003 https://blog.csdn.net/huashuimu2003/article/details/84437456

背景 Background
本题要用字符数组来存储操作的数据。
但是cin在读入字符的时候会忽略空格,所以,不能用cin来读;
c++的字符数组支持整体读入,gets是整体读入用的。
具体形式如下:

char str[1000];
int n,k,t,a,b;
scanf("%d %d %d\n",&n,&k,&t);
gets(str);

scanf 最后的 \n是读入换行符,而 gets(str)是遇到换行符才会结束,所以可以将空格也读入。并且str的长度就是n,不过是从下标0开始,n-1结束。
描述 Description=
陶陶学了数组,他对写文章特别感兴趣,自从学了数组之后,他就想编一个文字编辑器。现在对一般的文字操作很感兴趣,于是,他就有了以下问题。
现在有个长度为n的字符数组,并且知道插入光标的位置为k,现在他对字符数组有以下操作:
1、输出操作(G):输出光标所在的当前字符。
2、左移光标(L):把光标从当前位置左移一位.
3、右移光标(R):把光标从当前位置右移一位。
4、交换操作(S a b):把 a位置的字符与b位置的字符交换
(删除与旋转操作)
比如 当前长度为13字符数组为: ‘long long ago’;当前光标所在位置为4
如果一个G操作:则输出字符’g’
如果一个L操作:则光标会移到3
如果一个R操作:则光标会移到5
如果一个S 1 4 操作,则字符数组会变成 ‘gonl long ago’
当然会有很多次的各种操作,操作顺序不一样,输出结果肯定不一样.
陶陶觉得这个问题很有意义,于是他就想让大家用程序来实现这些操作
输入格式 Input Format
  第一行为 n k t(n表示数组含有n个字符 n<=100,k表示有k个操作 k<=50 ,t为当前光标所在位置)
  第二行为n个字符
  下面有 k行,表示k个操作(其中会有 x个 G 输出操作 )
输出格式 Output Format
   x行,每行为G操作的输出的当前字符
样例输入 Sample Input

13 6 4
long long ago
G
S 4 7
G
L
L
G
样例输出 Sample Output

g
o
o
时间限制 Time Limitation
1s

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
    char str[1000];
    int n,k,t,a,b;
    scanf("%d %d %d\n",&n,&k,&t);
    gets(str);
    for(int i=0;i<k;i++)
	{  
	    char ch;
	    cin>>ch; 
	    if(ch=='G')  cout <<str[t-1]<<endl;
	    if(ch=='L')  t--;
	    if(ch=='R')  t++;
	    if(ch=='S')
	    {
	    	cin>>a>>b;
	    	char temp=str[a-1];
	    	str[a-1]=str[b-1];
	    	str[b-1]=temp;
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/huashuimu2003/article/details/84437456