题解 | #字符串的展开#

字符串的展开

https://ac.nowcoder.com/acm/problem/16644

这道题就是存模拟,思路比较明确,主要就是实现。我的思路就是去找到'-'号,然后判断他是数字还是英文字母,并且再判断他们的左右顺序满足,右边严格大于左边,接着再根据p1,p2,p3所给的条件去拼接合理的字符串,我是把字符串拼接起来后,再最后输出。 然后核心代码就是这段

					string a;
					if(p1==3){
						int cnt=s[i+1]-s[i-1]-1;
						cnt=cnt*p2;
						for(int i=0;i<cnt;i++){
							a=a+"*";
						}
					}
					else{
						if(p3==1){
							for(char j=s[i-1]+1;j<s[i+1];j++){
								for(int k=0;k<p2;k++){
									a=a+j;
								}
							}
						}
						else{
							for(char j=s[i+1]-1;j>s[i-1];j--){
								for(int k=0;k<p2;k++){
									a=a+j;
								}
							}
						}
					}
					string s1=s.substr(0,i);//拼接字符串
					string s2=s.substr(i+1,s.size()-i-1);
					s=s1+a+s2;
					i=i+a.size();

完整代码如下:

```#include<iostream>
#include<algorithm>
#include<cmath>
#include<unordered_map>
using namespace std;


int main(){
	
	string s;
	int p1,p2,p3;
	cin>>p1>>p2>>p3;
	getchar();
	cin>>s;
	
	for(int i=1;i<s.size();i++){
		if(s[i]=='-'){
			if(isdigit(s[i-1])&&isdigit(s[i+1])){
				if(s[i+1]>s[i-1]){
					string a;
					if(p1==3){
						int cnt=s[i+1]-s[i-1]-1;
						cnt=cnt*p2;
						for(int i=0;i<cnt;i++){
							a=a+"*";
						}
					}
					else{
						if(p3==1){
							for(char j=s[i-1]+1;j<s[i+1];j++){
								for(int k=0;k<p2;k++){
									a=a+j;
								}
							}
						}
						else{
							for(char j=s[i+1]-1;j>s[i-1];j--){
								for(int k=0;k<p2;k++){
									a=a+j;
								}
							}
						}
					}
					string s1=s.substr(0,i);
					string s2=s.substr(i+1,s.size()-i-1);
					s=s1+a+s2;
					i=i+a.size();
				}
			}
			else if(s[i-1]>='a'&&s[i-1]<='z'&&s[i+1]>='a'&&s[i+1]<='z'){
				if(s[i+1]>s[i-1]){
					if(p1==1){
						string a;
						if(p1==3){
							int cnt=s[i+1]-s[i-1]-1;
							cnt=cnt*p2;
							for(int i=0;i<cnt;i++){
								a=a+"*";
							}
						}
						else{
							if(p3==1){
								for(char j=s[i-1]+1;j<s[i+1];j++){
									for(int k=0;k<p2;k++){
										a=a+j;
									}
								}
							}
							else{
								for(char j=s[i+1]-1;j>s[i-1];j--){
									for(int k=0;k<p2;k++){
										a=a+j;
									}
								}
							}
						}
						string s1=s.substr(0,i);
						string s2=s.substr(i+1,s.size()-i-1);
						s=s1+a+s2;
						i=i+a.size();
					}
					else{
						string a;
						if(p1==3){
							int cnt=s[i+1]-s[i-1]-1;
							cnt=cnt*p2;
							for(int i=0;i<cnt;i++){
								a=a+"*";
							}
						}
						else{
							if(p3==1){
								
								for(char j=s[i-1]+1-32;j<s[i+1]-32;j++){
									for(int k=0;k<p2;k++){
										a=a+j;
									}
								}
							}
							else{
								for(char j=s[i+1]-1-32;j>s[i-1]-32;j--){
									for(int k=0;k<p2;k++){
										a=a+j;
									}
								}
							}
						}
						string s1=s.substr(0,i);
						string s2=s.substr(i+1,s.size()-i-1);
						s=s1+a+s2;
						i=i+a.size();
					}
				}
			}
		}
	}
	cout<<s;
	
	return 0;
}
 
全部评论

相关推荐

2 收藏 评论
分享
牛客网
牛客企业服务