您的位置:首页 > 理论基础 > 计算机网络

【replace的用法】第三届ACM/ICPC程序设计知识竞赛网络赛—— 字符串扩展

2013-05-26 22:42 337 查看
来源:点击打开链接

可以用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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐