洛谷C++简单题小练习day13—文字处理软件

day13--文字处理软件--2.16

习题概述

题目描述

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

·1 str:后接插入,在文档后面插入字符串 str,并输出文档的字符串;

·2 a b:截取文档部分,只保留文档中从第 a 个字符起 b 个字符,并输出文档的字符串;

·3 a str:插入片段,在文档中第 a 个字符前面插入字符串 str,并输出文档的字符串;

·4 str:查找子串,查找字符串str 在文档中最先的位置并输出;如果找不到输出 −1。

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

输入格式

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

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

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

输出格式

一共输出 q 行。

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

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

代码部分

#include<bits/stdc++.h>
using namespace std;

int n,a; //操作次数及类型
string qwq; // 定义初始文档
string c1; // 存储裁剪后的字符串
string b1; // 存储待插入字符串
int b,c,d=-1,e; 
int main()
{
	cin>>n; // 输入操作次数
	cin>>qwq; // 输入初始文档
	for(int i=0;i<n;i++) // 循环处理每个操作
	{
		cin>>a; //读取操作类型
		if(a==1) //插入字符串
		{
			cin>>b1; // 读取待插入字符串
			qwq+=b1; // 将字符串 b1 插入到文档尾部
			cout<<qwq<<endl; // 输出文档
		}
		else if(a==2) // 裁剪字符串
		{
			cin>>b>>c; // 读取裁剪参数
			c1=qwq.substr(b,c); // 截取文档中从第 b 个字符起长度为 c 的子串
			qwq=c1; // 将裁剪后的子串保存到文档中
			cout<<qwq; // 输出文档
			cout<<endl;
		}
		else if(a==3) // 插入子串
		{
			cin>>b>>b1; // 读取插入位置和待插入字符串
			qwq.insert(b,b1); // 在文档的第 b 个字符前插入字符串 b1
			cout<<qwq<<endl; // 输出文档
		}
		else if(a==4) // 查找子串
		{
			cin>>b1; // 读取待查找字符串
			if(qwq.find(b1)<qwq.size()) // 查找子串在文档中的位置
			cout<<qwq.find(b1)<<endl; // 如果找到则输出位置
			else
			cout<<-1<<endl; // 否则输出 -1
		}
	}
    return 0;
}

心得体会

1.  c1 = qwq.substr(b, c); 这行代码使用了 C++ 标准库中的 substr 函数,其作用是从字符串 qwq 中提取子串,并将得到的子串赋值给 c1

具体而言,substr 函数的原型是:string substr (size_t pos, size_t len) const;

·pos 参数表示要提取的子串的起始位置(索引),即从哪个字符开始提取子串。

·len 参数表示要提取的子串的长度,即需要提取多少个字符。

所以,qwq.substr(b, c) 的作用是从字符串 qwq 中的位置 b 处开始提取长度为 c 的子串,并将结果赋值给 c1

例如,如果 qwq 是 "Hello, World!",那么 qwq.substr(7, 5) 的结果就是 "World",因为它从索引 7 开始提取长度为 5 的子串。

2. qwq.insert(b, b1) 是 C++ 标准库中的 insert 函数,用于在字符串 qwq 的特定位置插入另一个字符串 b1

具体而言,insert 函数的原型是:string insert (size_t pos, const string& str);

·pos 参数表示插入的位置(索引),即在哪个字符前插入字符串。

·str 参数是要插入的字符串。

所以,qwq.insert(b, b1) 的作用是将字符串 b1 插入到字符串 qwq 的位置 b 前面。

例如,如果 qwq 是 "Hello, !",b 是 5,b1 是 "World",那么执行 qwq.insert(5, "World") 后,qwq 的值将变为 "Hello, World!",因为它在索引 5 的位置之前插入了字符串 "World"。

3.  if(qwq.find(b1) < qwq.size()) 是条件语句,用来判断字符串 b1 是否在字符串 qwq 中出现过。

具体而言,find 函数的原型是:size_t find (const string& str, size_t pos = 0) const;

·str 参数是要查找的字符串。

·pos 参数是查找的起始位置(索引),默认值为 0。

find 函数会在字符串 qwq 中从位置 pos 开始查找字符串 str,如果找到了,则返回它在字符串中第一次出现的位置(索引),否则返回 string::nposstring::npos 是一个常量,表示无法找到指定的字符或子串。

因此,if(qwq.find(b1) < qwq.size()) 的作用是判断字符串 b1 是否在字符串 qwq 中出现过。如果出现过,则返回其在字符串中第一次出现的位置,并与字符串 qwq 的长度比较大小,如果小于字符串 qwq 的长度,则说明找到了;否则就没有找到。

例如,如果 qwq 是 "Hello, World!",b1 是 "World",那么执行 qwq.find("World") 后,将返回 7,因为子串 "World" 在字符串 qwq 中首次出现的位置是 7。而如果 qwq.find("Java"),将返回 string::npos,因为字符串 qwq 中不存在子串 "Java"。

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-02-17 03:30:03       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-17 03:30:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-17 03:30:03       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-17 03:30:03       20 阅读

热门阅读

  1. react中render阶段做了什么

    2024-02-17 03:30:03       34 阅读
  2. 作业2.15

    2024-02-17 03:30:03       26 阅读
  3. 开源软件的影响力

    2024-02-17 03:30:03       22 阅读
  4. 洛谷 P2580 于是他错误的点名开始了

    2024-02-17 03:30:03       27 阅读
  5. Python在生物信息学中的应用:捕获所有异常

    2024-02-17 03:30:03       25 阅读
  6. MQL语言图表事件详解

    2024-02-17 03:30:03       29 阅读
  7. bat 定时收缩sqlserver2012

    2024-02-17 03:30:03       27 阅读
  8. 冒泡排序,判断回文,以及12-24小时制

    2024-02-17 03:30:03       31 阅读
  9. C++:迭代器的封装思想

    2024-02-17 03:30:03       25 阅读