题解 P5734 【文字处理软件】
这是一道很好的的字符串操作入门题,本篇将介绍如何使用字符数组构成的字符串来解决此题,适合使用C/C++的读者。
2020/1/16完成;2022/9/15更新
库函数是相对高效的
相对于其他基本数据类型,字符串的存储和操作需要耗费大量空间和时间,但在某些情况下字符串的使用又是不可避免的,这推动字符串操作的相关库函数在大量底层优化后是相对高效的。
希望本篇题解能使读者更好的了解字符串相关库函数
此篇使用到的库函数:
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串
对于以下叙述,我们约定:
对于操作
- 需使用
strcat函数
将
举例:
原始串: ILove
输入: 1 Luogu
操作后
ILoveLuogu(存于
对于操作
- 需使用
strcpy函数
首先,将 a + b 位及以后舍去;
接着,将 a 位及以后复制到
最后,将
举例:
原始串: ILoveLuoguMubuky
输入: 2 5 5
第一步操作后:
ILoveLuogu(存于
第二步操作后:
Luogu(存于
第三步操作后:
Luogu(存于
对于操作
- 需使用
strcat函数
首先,将 a 位及以后的部分接到
接着,将 a 位。
举例:
原始串: Luogu
输入: 3 3 guGugu
第一步操作后:
guGugugu(存于
Luo(存于
第二步操作后:
LuoguGugugu(存于
对于操作
- 需使用
strstr函数
查找 NULL ,则如题输出 -1,否则将函数返回的指针与字符串串首指针作差以获得其在字符串中的位置。
举例:
原始串: LuoguGugugu
输入: 4 gu
输出: 3
完整代码:
#include<stdio.h>
#include<string.h>
#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]);
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;
}
评测记录 (代码长度702B,用时10ms,内存664.00KB)
题目链接:P5734 【深基 6.例 6】文字处理软件