题面
编写一个程序,对给定字符串str执行一系列命令
该命令是以下命令之一:
- 打印a b : 从str的第a个字符打印到第b个字符
- 反转a b : 从str的第a个字符反转到第b个字符
- 替换a b p : 将str的第a个字符到第b个字符转换成 p
请注意,str从0开始。
输入
在第一行中,给出了字符串 str, str由小写字母组成。
第二行给出了命令数量 q 。
在接下来的 q 行中,每个命令都以上述格式给出。
输出
对于每个输出命令,在一行中输出一个字符串。
数据范围
1 ≤ length of str ≤ 1000
1 ≤ q ≤ 100
0 ≤ a ≤ b < length of str
对于替换要求,b-a+1=length of p
输入样例
abcde
3
replace 1 3 xyz
reverse 0 2
print 1 4
输出样例
xaze
#include<stdio.h>
int main()
{
int i, j;
char* order[3] = { "replace","reverse","print" };
char str[2000] = { '\0' };
char s[200][20] = { '\0' };
int t[200][2];
char z[200][2000] = {'\0'};
int q = 0;
scanf("%s", str);
scanf("%d", &q);
getchar();
for (i = 0; i < q; i++)
{
scanf("%s", s[i]);
scanf("%d%d", &t[i][0],&t[i][1]);
getchar();
if (!strcmp(s[i], order[0]))
{
scanf("%s",z[i]);
// getchar();
}
}
for (i = 0; i < q; i++)
{
if (!strcmp(s[i], order[0]))
{
int num = t[i][1] - t[i][0] + 1;
for (j = 0; j < num; j++)
{
str[j + t[i][0]] = z[i][j];
}
}
else if (!strcmp(s[i], order[1]))
{
int num = t[i][1] - t[i][0] + 1;
for (j = 0; j < num/2; j++)
{
char tmp = str[t[i][1]-j];
str[t[i][1]-j] = str[t[i][0]+j];
str[t[i][0]+j] = tmp;
}
}
else if (!strcmp(s[i], order[2]))
{
int num = t[i][1] - t[i][0] + 1;
for (j = 0; j < num; j++)
{
printf("%c", str[j + t[i][0]]);
}
printf("\n");
}
}
}