noip 1996文字列編集-普及グループ(シミュレーション、文字列処理)

2353 ワード

A1102. 文字列の編集
時間制限:
1.0 sメモリ制限:
256.0MB  
合計コミット回数:
2044 AC回数:
713平均点:
61.16
この問題を次のように共有します.
       
   
フォーマットされていない問題を表示して問題のディスカッションを送信
試験問題の出所
NOIP 1996普及グループ
問題の説明
キーボードから文字列(長さ<=40文字)を入力し、文字'.終わります.編集機能は次のとおりです.
1 D:1文字を削除し、コマンドの方式は:D aのうちaは削除された文字であり、例えば:D sは削除文字’s’を表し、文字列に複数の‘s’があれば、最初に現れたものを削除する.
2 I:1文字を挿入します.コマンドのフォーマットは、Ia 1 a 2で、a 1は指定した文字の前に挿入され、a 2は挿入する文字を表します.例えば、Is dは、指定された文字’s’の前に文字‘d’を挿入し、元の列に複数の‘s’があれば、最後の文字の前に挿入する.
3 R:1文字を置換し、コマンド形式は:R a 1 a 2のうちa 1は置換された文字であり、a 2は置換された文字であり、元の列に複数のa 1がある場合はすべて置換しなければならない.
入力フォーマット
合計2行を入力し、第1の動作の元の列('.'で終了)、第2の動作コマンド(入力方法は「問題の説明」を参照).
出力フォーマット
同じ行を出力し、変更した文字列または指定した文字が存在しないプロンプト情報を出力します.
サンプル入力
This is a book.
D s
サンプル出力
Thi is a book.
入出力サンプルの説明
コマンドはsを削除し、文字に最初に現れるsがThisにあると、結果が得られます.
評価リンク:http://www.tsinsen.com/A1102
解析:シミュレーション.
c文字列(char配列)処理コード:
#include
#include
using namespace std;
char s[100];
int main()
{
  int i,j,k,len;
  char a,b,c;
  bool flag;
  
  gets(s);
  a=getchar();
  len=strlen(s);
  for(i=len-1;i>=0;i--)
    if(s[i]=='.'){len=i+1;break;}
  
  if(a=='D')
    {
      getchar(),b=getchar();
      flag=0;
      for(i=0;i=0;i--)
         if(s[i]==b){j=i;break;}
       for(i=0;i

c++文字列(string)処理コード:
#include
#include
#include
#include
using namespace std;

int main()
{
  int i,j,k,len;
  string s,c1,c2,c3;
  size_t p;
  
  getline(cin,s),len=s.length(),c3=s[len];
  for(i=0;i>c1;
  switch(c1[0])
    {
      case 'D':cin>>c2;
	           p=s.find_first_of(c2);
               if(p>c2>>c3;
               p=s.find_last_of(c2);
			   s.insert(p,c3);
			   break;
	  case 'R':cin>>c2>>c3;
	           p=s.find_first_of(c2);
	           while(p!=string::npos)
	             {
	               s[p]=c3[0];
	               p=s.find_first_of(c2,p+1);
				 }
	           break;
	}
  cout<