UBB代码转换
YOYO
posted @ 2009年5月12日 21:04
in 【ICPC】解题报告
, 2936 阅读
FJNU3018:http://acm.fjnu.edu.cn/show?problem_id=3018
自己出的题目居然过不了 囧的 明明是用生成数据的那个代码 郁闷 于是重写一遍
-
#include<iostream>
-
#include<string>
-
using namespace std;
-
-
#define TYPE 8
-
-
string ubb[TYPE][4];
-
-
void regUBB(int i, string s, string e, string rs, string re){
-
ubb[i][0] = s;
-
ubb[i][1] = e;
-
ubb[i][2] = rs;
-
ubb[i][3] = re;
-
}
-
-
int main(){
-
regUBB(0, "[b]", "[/b]", "<b>", "</b>");
-
regUBB(1, "[i]", "[/i]", "<i>", "</i>");
-
regUBB(2, "[u]", "[/u]", "<u>", "</u>");
-
regUBB(3, "[red]", "[/red]", "<font color=\"red\">", "</font>");
-
regUBB(4, "[green]", "[/green]", "<font color=\"green\">", "</font>");
-
regUBB(5, "[blue]", "[/blue]", "<font color=\"blue\">", "</font>");
-
regUBB(6, "[img]", "[/img]", "<img src=\"", "\" />");
-
regUBB(7, "[url]", "[/url]", "<a href=\"", "\">");
-
-
string str;
-
char ch[100];
-
while(gets(ch)){
-
str = (string)ch;
-
for(int i=0; i<TYPE-1; i++){
-
while(true){
-
int s = str.find(ubb[i][0]);
-
int e = str.find(ubb[i][1]);
-
if(s==-1||e==-1)break;
-
if(e<s)break;
-
str.erase(s,ubb[i][0].size());
-
str.insert(s, ubb[i][2]);
-
e = str.find(ubb[i][1]);
-
str.erase(e,ubb[i][1].size());
-
str.insert(e, ubb[i][3]);
-
}
-
}
-
while(true){
-
int s = str.find(ubb[7][0]);
-
int e = str.find(ubb[7][1]);
-
if(s==-1||e==-1)break;
-
if(e<s)break;
-
string url = str.substr(s+ubb[7][0].size(), e - s - ubb[7][0].size());
-
str.erase(s, ubb[7][0].size());
-
str.insert(s, ubb[7][2]);
-
str.insert(s + ubb[7][2].size(), url);
-
str.insert(s + ubb[7][2].size() + url.size(), ubb[7][3]);
-
e = str.find(ubb[7][1]);
-
str.erase(e, ubb[7][1].size());
-
str.insert(e, "</a>");
-
}
-
cout<<str<<endl;
-
}
-
return 0;
-
}
不知道C++里面有没有正则表达式 于是就自己模拟 - - 如果有的话应该很快 嗯。
- 无匹配