noip1996 字符串编辑 - 普及组 (模拟,字符串处理)

来源:互联网 发布:源码生成apk 编辑:程序博客网 时间:2024/06/05 17:35
A1102. 字符串编辑
时间限制:1.0s   内存限制:256.0MB  
总提交次数:2044   AC次数:713   平均分:61.16
将本题分享到:
      
   
查看未格式化的试题   提交   试题讨论
试题来源
  NOIP1996 普及组
问题描述
  从键盘输入一个字符串(长度<=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中,即得到结果。


评测链接:http://www.tsinsen.com/A1102

解析:模拟。

c字符串(char数组)处理代码:

#include<cstdio>#include<cstring>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<len;i++)        {          if(s[i]!=b || flag)printf("%c",s[i]);          else flag=1;        }    }  if(a=='I')     {       getchar(),b=getchar();       getchar(),c=getchar();       j=100;       for(i=len-1;i>=0;i--)         if(s[i]==b){j=i;break;}       for(i=0;i<len;i++)         {           if(i==j)printf("%c",c);           printf("%c",s[i]);         }       }     if(a=='R')     {       getchar(),b=getchar();       getchar(),c=getchar();       for(i=0;i<len;i++)         if(s[i]==b)printf("%c",c);         else printf("%c",s[i]);     }     printf("\n");   return 0;  }

c++字符串(string)处理代码:

#include<iostream>#include<cstdio>#include<string>#include<cstring>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<len;i++)if(s[i]=='.')break;  s.erase(i+1),len=s.length();    cin>>c1;  switch(c1[0])    {      case 'D':cin>>c2;           p=s.find_first_of(c2);               if(p<len)s.erase(p,1);             break;      case 'I':cin>>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<<s<<endl;  return 0;}


    0 0
    原创粉丝点击