P5734 【深基6.例6】文字处理软件题解

2024-01-10 16:20

本文主要是介绍P5734 【深基6.例6】文字处理软件题解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

你需要开发一款文字处理软件。最开始时输入一个字符串作为初始文档。可以认为文档开头是第 00 个字符。需要支持以下操作:

  • 1 str:后接插入,在文档后面插入字符串 strstr,并输出文档的字符串;
  • 2 a b:截取文档部分,只保留文档中从第a个字符起b个字符,并输出文档的字符串;
  • 3 a str:插入片段,在文档中第a个字符前面插入字符串 strstr,并输出文档的字符串;
  • 4 str:查找子串,查找字符串str在文档中最先的位置并输出;如果找不到输出−1。

为了简化问题,规定初始的文档和每次操作中的 strstr 都不含有空格或换行。最多会有q次操作。

输入输出格式

输入格式

第一行输入一个正整数q,表示操作次数。

第二行输入一个字符串str,表示最开始的字符串。

第三行开始,往下q行,每行表示一个操作,操作如题目描述所示。

输出格式

一共输出q行。

对于每个操作1,2,3,根据操作的要求输出一个字符串。

对于操作4,根据操作的要求输出一个整数

输入输出样例

输入样例

4
ILove
1 Luogu
2 5 5
3 3 guGugu
4 gu

输出样例

ILoveLuogu
Luogu
LuoguGugugu
3

分析(了解字符串的相关库函数)

strcat函数

extern char strcat(char dest, const char src);
strcat函数将src串拼接到dest串之后

 strstr函数

extern char strstr(char str1, const char str2);
strstr函数在str1串内查找str2串的位置,如未找到,则返回NULL

strcpy函数

extern char strcpy(char dest, const char src);
strcpy函数将src串复制到dest串

对于以下分析我们规定:

str串表示原始串,in 串表示读入串或暂存串

操作1:

需使用 strcat 函数,将in拼接到str 串后

举例:原始串: ILove,输入: 1 Luogu

操作后:ILoveLuogu(存于str 串)

操作2:

需使用 strcpy 函数

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

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

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

举例:原始串: ILoveLuoguMubuky,输入: 2 5 5

第一步操作后:ILoveLuogu(存于str串)

第二步操作后:Luogu(存于in串)

第三步操作后:Luogu(存于str串)

操作3:

需使用 strcat 函数

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

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

举例:原始串: Luogu,输入: 3 3 guGugu

第一步操作后:

guGugugu(存于in串)

Luo(存于str串)

第二步操作后:

LuoguGugugu(存于str串)

操作4:

需使用 strstr 函数

查找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;
}

这篇关于P5734 【深基6.例6】文字处理软件题解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/591389

相关文章

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

C - Word Ladder题解

C - Word Ladder 题解 解题思路: 先输入两个字符串S 和t 然后在S和T中寻找有多少个字符不同的个数(也就是需要变换多少次) 开始替换时: tips: 字符串下标以0开始 我们定义两个变量a和b,用于记录当前遍历到的字符 首先是判断:如果这时a已经==b了,那么就跳过,不用管; 如果a大于b的话:那么我们就让s中的第i项替换成b,接着就直接输出S就行了。 这样

【秋招笔试】9.07米哈游秋招改编题-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收集 100+ 套笔试题,笔试真题 会在第一时间跟新 🍄 题面描述等均已改编,如果和你笔试题看到的题面描述

LeetCode 第414场周赛个人题解

目录 Q1. 将日期转换为二进制表示 原题链接 思路分析 AC代码 Q2. 范围内整数的最大得分 原题链接 思路分析 AC代码 Q3. 到达数组末尾的最大得分 原题链接 思路分析 AC代码 Q4. 吃掉所有兵需要的最多移动次数 原题链接 思路分析 AC代码 Q1. 将日期转换为二进制表示 原题链接 Q1. 将日期转换为二进制表示 思路分析

牛客小白月赛100部分题解

比赛地址:牛客小白月赛100_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A.ACM中的A题 #include<bits/stdc++.h>using namespace std;#define ll long long#define ull = unsigned long longvoid solve() {ll a,b,c;cin>>a>>b>

Winfrom中解决图像、文字模糊的方法

1.添加清单 2.将清单中的下面内容取消注释

【生日视频制作】酒吧一群美女车展模特大屏幕视频改字AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程酒吧一群美女车展模特大屏幕视频改字AE模板修改文字特效广软件告生成神器素材祝福玩法AE模板工程 怎么如何做的【生日视频制作】酒吧一群美女车展模特大屏幕视频改字AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤: 安装AE软件 下载AE模板 把AE模板导入AE软件 修改图片或文字 渲染出视频

ORA-01861:文字与格式字符串不匹配

select t.*, t.rowid from log_jk_dtl t; insert into log_jk_dtl (rq,zy,kssj,jssj,memo)  values (to_date(sysdate,'yyyy-mm-dd'),'插入供应商', to_char(sysdate,'hh24:mi:ss'),to_char(sysdate,'hh24:mi:ss'),'备注'