1 条题解

  • 0
    @ 2025-8-24 22:13:52

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Mubuky
    如果结果不如你所愿,就在尘埃落定前奋力一搏。

    搬运于2025-08-24 22:13:52,当前版本为作者最后更新于2020-01-16 17:26:54,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    这是一道很好的的字符串操作入门题,本篇将介绍如何使用字符数组构成的字符串来解决此题,适合使用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

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

    strstr 串表示原始串, inin 串表示读入串或暂存串

    对于操作 11 :

    • 需使用 strcat 函数

    inin 拼接到 strstr 串后

    举例:

    原始串: ILove

    输入: 1 Luogu

    操作后

    ILoveLuogu(存于 strstr 串)

    对于操作 22 :

    • 需使用 strcpy 函数

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

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

    最后,将 inin 串中暂存的内容复制回 strstr 串中。

    举例:

    原始串: ILoveLuoguMubuky

    输入: 2 5 5

    第一步操作后:

    ILoveLuogu(存于 strstr 串)

    第二步操作后:

    Luogu(存于 inin 串)

    第三步操作后:

    Luogu(存于 strstr 串)

    对于操作 33 :

    • 需使用 strcat 函数

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

    接着,将 inin 串接到 strstr 串第 a 位。

    举例:

    原始串: Luogu

    输入: 3 3 guGugu

    第一步操作后:

    guGugugu(存于 inin 串)

    Luo(存于 strstr 串)

    第二步操作后:

    LuoguGugugu(存于 strstr 串)

    对于操作 44 :

    • 需使用 strstr 函数

    查找 inin 串在 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】文字处理软件

    • 1

    信息

    ID
    4712
    时间
    1000ms
    内存
    125MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者