試題 算法訓練 字符串編輯---藍橋杯

試題 算法訓練 字符串編輯

題目描述:

資源限制
時間限制:1.0s 內存限制:512.0MB
問題描述
  從鍵盤輸入一個字符串(長度<=40個字符),並以字符 ’.’ 結束。編輯功能有:
  1 D:刪除一個字符,命令的方式爲: D a 其中a爲被刪除的字符,例如:D s 表示刪除字符 ’s’ ,若字符串中有多個 ‘s’,則刪除第一次出現的。
  2 I:插入一個字符,命令的格式爲:I a1 a2 其中a1表示插入到指定字符前面,a2表示將要插入的字符。例如:I s d 表示在指定字符 ’s’ 的前面插入字符 ‘d’ ,若原串中有多個 ‘s’ ,則插入在最後一個字符的前面。
  3 R:替換一個字符,命令格式爲:R a1 a2 其中a1爲被替換的字符,a2爲替換的字符,若在原串中有多個a1則應全部替換。
  在編輯過程中,若出現被改的字符不存在時,則給出提示信息。
輸入格式
  輸入共兩行,第一行爲原串(以’.’結束),第二行爲命令(輸入方式參見“問題描述” 。
輸出格式
  輸出共一行,爲修改後的字符串或輸出指定字符不存在的提示信息。
  
樣例輸入
This is a book.
D s
樣例輸出
Thi is a book.

輸入輸出樣例解釋
  命令爲刪去s,第一個在字符中出現的s在This中,即得到結果。
  
思路很簡單,就是字符數組的刪除,插入,替換操作。

AC代碼:

#include <stdlib.h>
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <math.h>
using namespace std;
char a[45];
char ans[50];
int main()
{
	gets(a);
	char ch,s,d;
	char b[6];
	gets(b);
	int pos,i,k;
	if(b[0]=='D')//刪除操作 
	{
		ch=b[2];
		k=0;
		for(i=0;i<strlen(a);i++)
		{
			if(a[i]==ch)//記錄第一個ch字符的索引位置 
			{
				pos=i;
				break;
			}
		}
		for(i=0;i<strlen(a);i++)
			if(i!=pos)
				ans[k++]=a[i];
		cout<<ans<<endl;
	}
	else if(b[0]=='I')//插入操作 
	{
		s=b[2];
		d=b[4];
		k=0;
		for(i=0;i<strlen(a);i++)//記錄最後一個s字符的索引位置 
			if(a[i]==s)
				pos=i;
		for(i=0;i<strlen(a);i++)
		{
			ans[k++]=a[i];
			if(i+1==pos)
				ans[k++]=d;
		}
		for(i=0;i<k;i++)
			cout<<ans[i];
		cout<<endl;
	}
	else//替換操作 
	{
		s=b[2];
		d=b[4];
		int k=0;
		for(i=0;i<strlen(a);i++)
			if(a[i]==s)//將所有的s字符替換爲d字符 
				a[i]=d;
		cout<<a<<endl;
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章