1 条题解
-
0
自动搬运
来自洛谷,原作者为

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串的位置,如未找到,则返回NULLextern 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; } - 需使用
- 1
信息
- ID
- 4712
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者