字符串

来源:互联网 发布:js遍历多层json数据 编辑:程序博客网 时间:2024/05/16 00:21

描述

给三个参数a1,a2,a3和一个字符串,请按以下要求展开该字符串。
1. 只有当‘-’两侧两个字符同为小写字母或数字,且右边字符的ASCII值大于左边字符时才按要求展开,否则原样输出。
2. 参数a1。
a1=1,填充小写字母;a1=2,填充大写字母;a1=3,填充’*’。
a1=1和a1=2对两侧字符为数字的,无影响(还是填充数字)。比如当a-d,a1=2时展开为aBCd。2-4 a1=2时展开为234。
3. 参数a2。控制填充字符的重复次数(a2>=1)。
比如:a1=2  a2=3  a-d的展开形式为aBBBCCCd。
4. 参数a3。控制填充字符的顺序。
a3=1:顺序填充;a3=2:逆序填充。
比如:a1=1 a2=2 a3=2   a-d的展开形式为accbbd。

输入

多组测试样例。
每组测试样例占两行,第一行三个整数表示三个参数a1,a2,a3.
第二行一个字符串(只含小写字母、数字和‘-’,字符串长度不超过100)。

输出

输出展开后的字符串,每个样例占一行。

样例输入

1 2 1
bs-w1234-94-saa
3 4 2
aa-ai-ja-cd-g

样例输出

bsttuuvvw12345566778894-saa
aa-aija****cd********g

本题在怀化学院TEST 2的测试数据为

输入:

1 2 1
bs-w1234-94-saa
3 4 2
aa-ai-ja-cd-g
1 2 1
----
2 3 2
--aldjld-dkljfds-k-z
3 2 1
-ab-d-a--
1 3 2
a-d-z--l-l-8-0
2 1 1
sldfjlskdjf--dlfjsd-jabddljfdla-d-fldfj9-0-9dlsfldjflj
1 1 2
ldfjsldkfjodlkfjwefjs-dlfjweo--d--fds-dlfjo--pl-djf9-00-1-2
2 2 2
i--j-j-i-l-l-k-l-djflks-dklfjds-djfidj-k-i-i--i---j-k-0-9-0-4

输出:
bsttuuvvw12345566778894-saa
aa-aija****cd********g
----
--aldjld-dkljfds-kYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLz
-ab**d-a--
acccbbbdyyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeez--l-l-8-0
sldfjlskdjf--dlfjsdEFGHIjabddljfdlaBCdEfldfj9-0123456789dlsfldjflj
ldfjsldkfjodlkfjwefjs-dlfjweo--d--fds-dlfjo--pl-djf9-0012
i--j-j-iKKJJl-l-kl-djflks-dklfjds-djfidjk-i-i--i---jk-088776655443322119-03322114

#include<iostream>  #include<string>  using namespace std;    bool IsSmallLetter(char c){      if(c>='a' && c<='z')          return 1;      return 0;  }    bool IsNumber(char c){      if(c>='0' && c<='9')          return 1;      return 0;  }    string StringStructure(char c,int a1,int a2){      string result="";      int i;      switch(a1){      case 1:          for(i=0;i<a2;i++)              result+=c;          break;      case 2:          for(i=0;i<a2;i++)              if(IsNumber(c))                  result+=c;              else                  result+=(c-32);          break;      case 3:          for(i=0;i<a2;i++)              result+="*";      }      //cout<<"已构造字符为"<<c<<"的字符串,构造的字符串为"<<result<<endl;      return result;  }    string StringInversion(string s){      int len=s.length();      string result="";      while(len--){          result+=s[len];      }      //cout<<"倒置的字符串为"<<result<<endl;      return result;  }  int main(){      string str,temp;      int a1,a2,a3,FindPlace;      char FrontChar,BehindChar,i;      while(cin>>a1>>a2>>a3){          cin>>str;          FindPlace=0;          while((FindPlace=str.find("-",FindPlace))!=-1){              FrontChar=str[FindPlace-1];              BehindChar=str[FindPlace+1];              //cout<<"在"<<FindPlace<<"找到字符-,前一个字符和后一个字符为"<<FrontChar<<" "<<BehindChar<<endl;              if(((IsSmallLetter(FrontChar) && IsSmallLetter(BehindChar))|| (IsNumber(FrontChar) && IsNumber(BehindChar))) && FrontChar<BehindChar){                  str.erase(FindPlace,1);                  //cout<<"已删除序号为"<<FindPlace<<"的字符\n";                  temp="";                  for(i=FrontChar+1;i<BehindChar;i++){                      temp+=StringStructure(i,a1,a2);                  }                  if(a3==1)                      str.insert(FindPlace,temp);                  else                      str.insert(FindPlace,StringInversion(temp));                  FindPlace+=temp.length()-1;              }              FindPlace++;          }          cout<<str<<endl;      }      return 0;  }





0 0
原创粉丝点击