来源:点击打开链接
可以用replace来替换。。replace的用法中很有用的两个:
1、用string 中从 _Pos2 开始的 _Num2 个字符,代替操作string 中从 _Pos1 开始的 _Num1 个字符
用C-string 中的 _Num2 个字符,代替操作string 中从 _Pos1 开始的 _Num1 个字符
basic _ string& replace( size _ type _Pos1 , size _ type _Num1 , const basic _ string& _Str , size _ type _Pos2 , size _ type );
basic _ string& replace( size _ type _Pos1 , size _ type _Num1 , const value _ type* _Ptr , size _ type _Num2 );
2、用 _Count 个character _Ch , 代替操作string 中从 _Pos1 开始的 _Num1 个字符
basic _ string& replace( size _ type _Pos1 , size _ type _Num1 , size _ type _Count , value _ type _Ch );
#include <iostream> #include <string> #include <ctype.h> using namespace std; string lowalp="abcdefghijklmnopqrstuvwxyz"; string uppalp="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; string numalp="0123456789"; int main() { int testcase; string tar,res; cin>>testcase; while(testcase--) { cin>>tar; int chanpos; int startrep=0,enrep=0; char st,ed; for(int i=1;i<tar.length();i++) { if(tar[i]=='-') { chanpos=i; st=tar[i-1]; ed=tar[i+1]; if(islower(st) && islower(ed) && st<ed) { startrep=lowalp.find(st,0); enrep=lowalp.find(ed,0); tar.replace(i,1,lowalp,startrep+1,enrep-startrep-1); //cout<<tar<<endl; } else if(isupper(st) && isupper(ed) && st<ed) { startrep=uppalp.find(st,0); enrep=uppalp.find(ed,0); tar.replace(i,1,uppalp,startrep+1,enrep-startrep-1); //cout<<tar<<endl; } else if(isdigit(st) && isdigit(ed) && st<ed) { startrep=numalp.find(st,0); enrep=numalp.find(ed,0); tar.replace(i,1,numalp,startrep+1,enrep-startrep-1); } else if(st==ed &&((isupper(st)&&isupper(ed))||(islower(st)&&islower(ed))||(isdigit(st)&&isdigit(ed)))) { tar.erase(chanpos,1); //trick } } } cout<<tar<<endl; } }