你需要开发一款文字处理软件。最开始时输入一个字符串作为初始文档。可以认为文档开头是第 00 个字符。需要支持以下操作:
1 str
:后接插入,在文档后面插入字符串 strstr,并输出文档的字符串。
2 a b
:截取文档部分,只保留文档中从第 �a 个字符起 �b 个字符,并输出文档的字符串。
3 a str
:插入片段,在文档中第 �a 个字符前面插入字符串 strstr,并输出文档的字符串。
4 str
:查找子串,查找字符串 strstr 在文档中最先的位置并输出;如果找不到输出 −1−1。
为了简化问题,规定初始的文档和每次操作中的 strstr 都不含有空格或换行。最多会有 �q 次操作。
第一行输入一个正整数 �q,表示操作次数。
第二行输入一个字符串 strstr,表示最开始的字符串。
第三行开始,往下 �q 行,每行表示一个操作,操作如题目描述所示。
一共输出 �n 行。
对于每个操作 1,2,31,2,3,根据操作的要求输出一个字符串。
对于操作 44,根据操作的要求输出一个整数。
输入 #1复制
4 ILove 1 Luogu 2 5 5 3 3 guGugu 4 gu
输出 #1复制
ILoveLuogu Luogu LuoguGugugu 3
数据保证,1≤�≤1001≤q≤100,开始的字符串长度 ≤100≤100
//写c++的题目肯定是要用stl的,那么下面我们来看接下来的
此篇使用到的库函数:
extern char strcat(char dest, const char src);
strcat
函数将src
串拼接到dest
串之后
extern char strstr(char str1, const char str2);
strstr
函数在str1
串内查找str2
串的位置,如未找到,则返回NULL
extern char strcpy(char dest, const char src);
strcpy
函数将src
串复制到dest
串
对于以下叙述,我们约定:
���str 串表示原始串, ��in 串表示读入串或暂存串
对于操作 11 :
strcat
函数将 ��in 拼接到 ���str 串后
举例:
原始串: ILove
输入: 1 Luogu
操作后
ILoveLuogu
(存于 ���str 串)
对于操作 22 :
strcpy
函数首先,将 ���str 串第 a + b
位及以后舍去;
接着,将 ���str 串第 a
位及以后复制到 ��in 串中暂存;
最后,将 ��in 串中暂存的内容复制回 ���str 串中。
举例:
原始串: ILoveLuoguMubuky
输入: 2 5 5
第一步操作后:
ILoveLuogu
(存于 ���str 串)
第二步操作后:
Luogu
(存于 ��in 串)
第三步操作后:
Luogu
(存于 ���str 串)
对于操作 33 :
strcat
函数首先,将 ���str 串第 a
位及以后的部分接到 ��in 串后;
接着,将 ��in 串接到 ���str 串第 a
位。
举例:
原始串: Luogu
输入: 3 3 guGugu
第一步操作后:
guGugugu
(存于 ��in 串)
Luo
(存于 ���str 串)
第二步操作后:
LuoguGugugu
(存于 ���str 串)
对于操作 44 :
strstr
函数查找 ��in 串在 ���str 串中的位置,若函数返回 NULL
,则如题输出 -1
,否则将函数返回的指针与字符串串首指针作差以获得其在字符串中的位置。
举例:
原始串: LuoguGugugu
输入: 4 gu
输出: 3
对于strstr函数是子串在母串中出现的次数
#include
#include
int main()
{
int i,n,j,k=0;
char a1[1001],a2[1001];
scanf("%s %s",a1,a2);
char *p;
p=a1;
while( ( p=strstr(p,a2) ) != NULL)//p为子串与母串匹配成功
{ //时,子串第一个符号在母串
k++; //中出现的位置地址
p++; //p++后才能匹配下一个,否则无法退出循环
}
printf("%d",k);
}
abababababa
aba
5
下面试完整的代码
#include
#include
#define MAXN 101
char str[MAXN], in[MAXN];
int main(void)
{
int q;
scanf("%d\n%s", &q, str);
for (int i = 1; i <= q; i++) {
int opt;
scanf("%d", &opt);
if (opt == 1) {
scanf("%s", in);
strcat(str, in);
printf("%s\n", str);
}
else if (opt == 2) {
int a, b;
scanf("%d %d", &a, &b);
str[a + b] = '\0';
strcpy(in, &str[a]);
strcpy(str, in);
printf("%s\n", str);
}
else if (opt == 3) {
int a;
scanf("%d %s", &a, in);
strcat(in, &str[a]);
printf("%s@",in);
str[a] = '\0';
strcat(str, in);
printf("%s\n", str);
}
else {
scanf("%s", in);
char *ans = strstr(str, in);
printf("%d\n", ans != NULL ? (int)(ans - str) : -1);
}
}
return 0;
}