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;
}
源代码:
#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;
}
相关文章推荐
- 【字符串处理】【模拟】NBA工资
- hdu 1800 Flying to the Mars(简单模拟,string,字符串)
- ZOJ 3985 String Of CCPC 字符串,模拟
- noip2008 立体图 (字符串+模拟)
- sdjzu 1056:字符串最小表示 贪心模拟
- 使用Postman模拟传入json字符串测试代码
- 和字符串有关的函数的模拟实现 strlen strcpy strcat strstr strcmp
- HDU 1736(字符串模拟的水题)
- poj Babelfish 2503 (字符串模拟)
- 字符串训练(一)模拟实现strlen,strcmp,strcpy,strcat函数
- 字符串操作函数模拟实现
- 洛谷1071 潜伏者 NOIP2009 字符串模拟
- NOIP2017赛前模拟 字符串(AC自动机)
- 两个大数相加,使用字符串模拟相加过程
- poj 2413 How many Fibs? 大数累加模板+字符串模拟大数比较大小
- FZU 2122 又见LKity 简单的字符串模拟
- POJ 字符串的全排列 水题也搞我 多种方法 DFS,STL,直接模拟。。。。。。
- 字符串模拟大数相加——Java实现
- 洛谷 P1914 小书童——密码【字符串+模拟】
- UVA 340 Master-Mind Hints 猜数字提示的游戏 简单模拟