試題 算法訓練 字符串編輯
題目描述:
資源限制
時間限制: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;
}