题解 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

对于以下叙述,我们约定:

对于操作 1 :

in 拼接到 str 串后

举例:

原始串: ILove

输入: 1 Luogu

操作后

ILoveLuogu(存于 str 串)

对于操作 2 :

首先,将 str 串第 a + b 位及以后舍去;

接着,将 str 串第 a 位及以后复制到 in 串中暂存;

最后,将 in 串中暂存的内容复制回 str 串中。

举例:

原始串: ILoveLuoguMubuky

输入: 2 5 5

第一步操作后:

ILoveLuogu(存于 str 串)

第二步操作后:

Luogu(存于 in 串)

第三步操作后:

Luogu(存于 str 串)

对于操作 3 :

首先,将 str 串第 a 位及以后的部分接到 in 串后;

接着,将 in 串接到 str 串第 a 位。

举例:

原始串: Luogu

输入: 3 3 guGugu

第一步操作后:

guGugugu(存于 in 串)

Luo(存于 str 串)

第二步操作后:

LuoguGugugu(存于 str 串)

对于操作 4 :

查找 in 串在 str 串中的位置,若函数返回 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】文字处理软件