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

来源:点击打开链接

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

		

	}



	

}


 

 

你可能感兴趣的:(replace)