50pts求Hack数据
查看原帖
50pts求Hack数据
812227
Sunrise_beforeglow楼主2024/9/26 15:25
#include<bits/stdc++.h>
using namespace std;
string s;
stack<string>stk;
struct node
{
    string a,b;
};
stack<node>m;
string ch;
int point=0;
string ans;
bool compare(int x,string h)
{
    if(x+h.size()>=s.size())return false;
    if(s.substr(x,h.size() )==h)return true;
    else return false;
}
void out(string x){ans+=x;}
void check(string x)
{
    if(stk.empty()||stk.top()!=x)
    {
        cout<<"Match Error";
        exit(0);
    }
    else stk.pop();
}
int main()
{
	while(getline(cin,ch))
    {
        s+=ch;
        s+='\n';
    }
	while(point<s.size())
    {
        if(compare(point,"[h1]"))
        {
            stk.push("[h1]");
            point+=4;
            out("# ");
        }
        else if(compare(point,"[/h1]"))
        {
            check("[h1]");
            point+=5;
            out(" #");
        }
        else if(compare(point,"[h2]"))
        {
            stk.push("[h2]");
            point+=4;
            out("## ");
            continue;
        }
        else if(compare(point,"[/h2]"))
        {
            check("[h2]");
            point+=5;
            out(" ##");
            continue;
        }
        else if(compare(point,"[i]"))
        {
            stk.push("[i]");
            point+=3;
            out("*");
            continue;
        }
        else if(compare(point,"[/i]"))
        {
            check("[i]");
            point+=4;
            out("*");
            continue;
        }
        else if(compare(point,"[b]"))
        {
            stk.push("[b]");
            point+=3;
            out("__");
            continue;
        }
        else if(compare(point,"[/b]"))
        {
            check("[b]");
            point+=4;
            out("__");
            continue;
        }
        else if(compare(point,"[url="))
        {
            int pos=s.find("]",point+5);
            if(pos==string::npos)
            {
                cout<<"Match Error";
                return 0;
            }
            out("[");
            m.push({"url",s.substr(point+5,pos-point-5)});
            point=pos+1;
            continue;
        }
        else if(compare(point,"[/url]"))
        {
            if(m.empty()||m.top().a!="url")
            {
                cout<<"Match Error";
                return 0;
            }
            point+=6;
            out("](");
            out(m.top().b);
            out(")");
            m.pop();
            continue;
        }
        else if(compare(point,"[img="))
        {
            int pos=s.find("]",point+5);
            if(pos==string::npos)
            {
                cout<<"Match Error";
                return 0;
            }
            out("![");
            m.push({"img",s.substr(point+5,pos-point-5)});
            point=pos+1;
            continue;
        }
        else if(compare(point,"[/img]"))
        {
            if(m.empty()||m.top().a!="img")
            {
                cout<<"Match Error";
                return 0;
            }
            point+=6;
            out("](");
            out(m.top().b);
            out(")");
            m.pop();
            continue;
        }
        else if(compare(point,"[quote]"))
        {
        	string q="";
        	point+=7;
        	while(s[point]=='\n')point++;
        	while(point<s.size())
        	{
        		q+=s[point];
        		if(q.size()>7&&q.substr(q.size()-8)=="[/quote]")break;
        		point++;
			}
			if(point>=s.size())
			{
				cout<<"Match Error";
				return 0;
			}
			for(int i=1;i<=8;i++)q.pop_back();
			while(q.back()=='\n')q.pop_back();
			if(ans.back()!='\n')out("\n");
			out(">");
			for(auto i:q)
			{
				string h;
				h=i;
				out(h);
				if(i=='\n')out(">");
			}
			out("\n");
		}
		else if(compare(point,"[/quote]"))
		{
		    cout<<"Match Error";
		    return 0;
		}
        else
        {
            string h;
            h=s[point++];
            out(h);
        }
    }
    if((!stk.empty())||(!m.empty()))
    {
        cout<<"Unclosed Mark";
        return 0;
    }
    cout<<ans;
	return 0;
}
2024/9/26 15:25
加载中...