您的位置:首页 > 其它

sgu——340(字符串模拟)

2012-08-20 15:29 288 查看
题目地址:http://acm.sgu.ru/problem.php?contest=0&problem=340

源代码:

#include <cstdio>

#include <cstdlib>

#include <climits>

#include <iostream>

#include <algorithm>

#include <cstring>

#include <string>

#include <queue>

#include <map>

#include <vector>

#include <bitset>

#include <cmath>

#include <set>

#include <stack>

using namespace std;

char s[1000005];

stack<char>st;  
//栈,用于{}的匹配问题。

               

bool is_letter(char x)

{

    if(x>='A'&&x<='Z')

        return true;

    if(x>='a'&&x<='z')

        return true;

    return false;

}




bool is_operator(char x)

{

    if(x=='+'||x=='-'||x=='*'||x=='/')

        return true;

    return false;

}




bool is_digit(char x)

{

    return x>='0'&&x<='9';

}




int main()

{

    int i,j,k;




    while(gets(s))

    {

        int len=strlen(s);




        int now=0,cc=0;




        while(!st.empty())      //清空栈

            st.pop();


           

        while(now<len&&cc<2)

        {

            char x=s[now++];




            if(cc==0&&x!='$')     //因为题中说了是以$为开始。。

                continue;




            if(x=='$')

            {

                cc++;

                continue;

            }




            if(x==' ')

                continue;




            if(is_letter(x))

            {

                printf("<i>%c",x);

                while(now<len&&(is_letter(s[now])||s[now]==' '))

                {

                    if(s[now]!=' ')

                        printf("%c",s[now]);

                    now++;

                }

                printf("</i>");

                continue;

            }




            if(is_digit(x))

            {

                printf("%c",x);

                continue;

            }




            if(is_operator(x))

            {

                printf(" %c ",x);

                continue;

            }




            if(x=='('||x==')')

            {

                printf("%c",x);

                continue;

            }




            if(x=='}')

            {

                if(!st.empty())

                {

                    if(st.top()=='^')

                        printf("</sup>");

                    else

                        printf("</sub>");

                    st.pop();

                }

                continue;

            }




            if(x=='{')

                continue;




            if(x=='^')

            {

                st.push('^');

                printf("<sup>");

                while(now<len&&s[now]==' ')

                    now++;

                if(s[now]!='{')

                {

                    if(is_letter(s[now]))

                        printf("<i>%c</i></sup>",s[now++]);

                    else if(is_operator(s[now]))

                        printf(" %c </sup>",s[now++]);

                    else if(is_digit(s[now]))

                        printf("%c</sup>",s[now++]);;

                    st.pop();

                }

                continue;

            }




            if(x=='_')

            {

                st.push('_');

                printf("<sub>");

                while(now<len&&s[now]==' ')

                    now++;

                if(s[now]!='{')

                {

                    if(is_letter(s[now]))

                        printf("<i>%c</i></sub>",s[now++]);

                    else if(is_operator(s[now]))

                        printf(" %c </sub>",s[now++]);

                    else if(is_digit(s[now]))

                        printf("%c</sub>",s[now++]);

                    st.pop();

                }

                continue;

            }

        }




        puts("");

    }

    return 0;

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