秋逸

测试数据对字符串的删除,替换,以及插入

题目描述

从键盘输入一个字符串(长度<=40 个字符),并以字符 ’.’结束。

例如:‘This is a book.’ 现对该字符串进行编辑,编辑功能有:

D:删除一个字符,命令的方式为:D a
其中a为被删除的字符 例如:D s 表示删除字符 ‘s’ ,若字符串中有多个 ‘s’,则删除第一次出现的。 如上例中删除的结果为: ‘Thi is a book.’

I:插入一个字符,命令的格式为:I a1 a2
其中a1表示插入到指定字符前面,a2表示将要插入的字符。 例如:I s d 表示在指定字符 ‘s’ 的前面插入字符 ‘d’ ,若原串中有多个 ‘s’ ,则插入在最后一个字符的前面。 如上例中: 原串:‘This is a book.’ 插入后:‘This ids a book.’

R:替换一个字符,命令格式为: R a1 a2 其中a1为被替换的字符,a2为替换的字符,若在原串中有多个a1则应全部替换。 例如: 原串: ‘This is a book.’ 输入命令:R o e 替换后的字符串为:‘This is a beek.’

在编辑过程中,若出现被改的字符不存在时,则给出提示信息”Not exist”。

输入

每个测试文件只包含一组测试数据,每组输入数据包含两行:

第一行,输入一个字符串,表示原串; 第二行,输入一个字符串,表示命令。

输出

对于每组输入数据,输出编辑后的字符串,如果被改的字符不存在,则输出”Not exist”(引号不输出)。

样例输入

This is a book. D s

样例输出

Thi is a book.

我的代码

#include <bits/stdc++.h>
using namespace std;
int main()
{
	char str[55];
	vector<char> res;
	// gets(str);
	cin.get(str, 55);
	int len = strlen(str);
	char op, oped;
	cin >> op >> oped;
	int sign = 0;
	if (op == 'D')
	{
		for (int i = 0; i < len; i++)
		{
			if (str[i] == oped and sign == 0)
			{
				sign = 1;
			}
			else
			{
				res.push_back(str[i]);
			}
		}
	}
	else
	{
		char exts;
		cin >> exts;
		if (op == 'I')
		{
			for (int i = len - 1; i >= 0; i--)
			{
				if (str[i] == oped and sign == 0)
				{
					res.push_back(str[i]);
					res.push_back(exts);
					;
					sign = 1;
				}
				else
				{
					res.push_back(str[i]);
				}
			}
		}
		else if (op == 'R')
		{
			for (int i = 0; i < len; i++)
			{
				if (str[i] == oped)
				{
					sign = 1;
					res.push_back(exts);
				}
				else
				{
					res.push_back(str[i]);
				}
			}
		}
	}
	if (sign == 0)
	{
		cout << "Not exist";
	}
	else
	{
		vector<char>::iterator it = res.end();
		if (op == 'I')
		{
			while (it != res.begin())
			{
				it--;
				cout << (*it);
			}
		}
		else
		{
			it = res.begin();
			while (it != res.end())
			{
				cout << (*it);
				it++;
			}
		}
	}
}
字符串编辑
: 杨秋逸
https://yangqiuyi.com/blog/算法/字符串编辑/
© 2025 杨秋逸 . All rights reserved.