【NOIP2007提高组】字符串展开

【题外话】这道题纯粹考验耐心,某些经常调程序调到摔键盘的人可以尝试

【题外话2】除了考耐心以外完全没有什么难点

【题外话3】也许会稍微恶心一点?

【题外话4】其实我是在别人军训的时候滚来更博客的简直233333

 题目不贴了,NOIP2007原题什么的,然后就是关于某些小细节的处理,比如以‘-’开头啊,以‘-’结尾啊,还有‘--’啊,还有一种题目中提到的,‘-’两边分别是数字和字母,以及关于填充大写字母的时候数字不变什么的。

 总体来说其实就是一道字符处理模拟题,稍微细心与耐心一点的都可以10minAC

 我已经懒得吐槽自己的代码风格了。

  1 #include <algorithm>
  2 #include <iostream>
  3 #include <fstream>
  4 #include <cstdlib>
  5 #include <cstring>
  6 #include <string>
  7 using namespace std;
  8 ifstream fin("expand.in");
  9 ofstream fout("expand.out");
 10 string old,nw;
 11 int p1=0,p2=0,p3=0;
 12 void zx(int wi);
 13 void fx(int wi);
 14 int main(void)
 15 {
 16  fin>>p1>>p2>>p3;
 17  fin>>old;
 18  for(int i=0;i<old.size();i++)
 19     {
 20      if(old[i]=='-'&&i>=1&&i<old.size()-1)
 21        {
 22         if(old[i-1]=='-'||old[i+1]=='-')
 23           {
 24            nw+=old[i];
 25            continue;
 26           }
 27         if(old[i-1]>=old[i+1])
 28           {
 29            nw+=old[i];
 30            continue;
 31           }
 32         if((old[i-1]>='a'&&old[i-1]<='z')&&(old[i+1]<'a'||old[i+1]>'z'))
 33           {
 34            nw+=old[i];
 35            continue;
 36           }
 37         if((old[i+1]>='a'&&old[i+1]<='z')&&(old[i-1]<'a'||old[i-1]>'z'))
 38           {
 39            nw+=old[i];
 40            continue;
 41           }
 42         if(p3==1)zx(i);
 43         else fx(i);
 44        }
 45      else nw+=old[i];
 46     }
 47  fout<<nw;
 48  return 0;
 49 }
 50 void zx(int wi)
 51 {
 52  char ja;
 53  for(int i=1;i<=(old[wi+1]-old[wi-1])-1;i++)
 54     {
 55      for(int j=1;j<=p2;j++)
 56         {
 57          if(p1==1)
 58            {
 59             ja=old[wi-1]+i;
 60             nw+=ja;
 61            }
 62          if(p1==2&&old[wi+1]>='a'&&old[wi+1]<='z')
 63            {
 64             ja=old[wi-1]+i;
 65             ja-='a';
 66             ja+='A';
 67             nw+=ja;
 68            }
 69          if(p1==2&&(old[wi+1]<'a'||old[wi+1]>'z'))
 70            {
 71       ja=old[wi-1]+i;
 72             nw+=ja;
 73            }
 74          if(p1==3)
 75            {
 76             nw+="*";
 77            }
 78         }
 79     }
 80  return;
 81 }
 82 void fx(int wi)
 83 {
 84  char ja;
 85  for(int i=1;i<=(old[wi+1]-old[wi-1])-1;i++)
 86     {
 87      for(int j=1;j<=p2;j++)
 88         {
 89          if(p1==1)
 90            {
 91             ja=old[wi+1]-i;
 92             nw+=ja;
 93            }
 94          if(p1==2&&old[wi+1]>='a'&&old[wi+1]<='z')
 95            {
 96             ja=old[wi+1]-i;
 97             ja-='a';
 98             ja+='A';
 99             nw+=ja;
100            }
101          if(p1==2&&(old[wi+1]<'a'||old[wi+1]>'z'))
102            {
103       ja=old[wi+1]-i;
104             nw+=ja;
105            }
106          if(p1==3)
107            {
108             nw+="*";
109            }
110         }
111     }
112  return;
113 }

 

转载于:https://www.cnblogs.com/CYWer/p/4776371.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值