Liny_@NotePad

沉迷ACG中

UBB代码转换

YOYO posted @ 2009年5月12日 21:04 in 【ICPC】解题报告 , 2897 阅读

FJNU3018:http://acm.fjnu.edu.cn/show?problem_id=3018

自己出的题目居然过不了 囧的 明明是用生成数据的那个代码 郁闷 于是重写一遍

  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4.  
  5. #define TYPE 8
  6.  
  7. string ubb[TYPE][4];
  8.  
  9. void regUBB(int i, string s, string e, string rs, string re){
  10.         ubb[i][0] = s;
  11.         ubb[i][1] = e;
  12.         ubb[i][2] = rs;
  13.         ubb[i][3] = re;
  14. }
  15.  
  16. int main(){
  17.         regUBB(0, "[b]", "[/b]", "<b>", "</b>");
  18.         regUBB(1, "[i]", "[/i]", "<i>", "</i>");
  19.         regUBB(2, "[u]", "[/u]", "<u>", "</u>");
  20.         regUBB(3, "[red]", "[/red]", "<font color=\"red\">", "</font>");
  21.         regUBB(4, "[green]", "[/green]", "<font color=\"green\">", "</font>");
  22.         regUBB(5, "[blue]", "[/blue]", "<font color=\"blue\">", "</font>");
  23.         regUBB(6, "[img]", "[/img]", "<img src=\"", "\" />");
  24.         regUBB(7, "[url]", "[/url]", "<a href=\"", "\">");
  25.  
  26.         string str;
  27.         char ch[100];
  28.         while(gets(ch)){
  29.                 str = (string)ch;
  30.                 for(int i=0; i<TYPE-1; i++){
  31.                         while(true){
  32.                                 int s = str.find(ubb[i][0]);
  33.                                 int e = str.find(ubb[i][1]);
  34.                                 if(s==-1||e==-1)break;
  35.                                 if(e<s)break;
  36.                                 str.erase(s,ubb[i][0].size());
  37.                                 str.insert(s, ubb[i][2]);
  38.                                 e = str.find(ubb[i][1]);
  39.                                 str.erase(e,ubb[i][1].size());
  40.                                 str.insert(e, ubb[i][3]);
  41.                         }
  42.                 }
  43.                 while(true){
  44.                         int s = str.find(ubb[7][0]);
  45.                         int e = str.find(ubb[7][1]);
  46.                         if(s==-1||e==-1)break;
  47.                         if(e<s)break;
  48.                         string url = str.substr(s+ubb[7][0].size(), e - s - ubb[7][0].size());
  49.                         str.erase(s, ubb[7][0].size());
  50.                         str.insert(s, ubb[7][2]);
  51.                         str.insert(s + ubb[7][2].size(), url);
  52.                         str.insert(s + ubb[7][2].size() + url.size(), ubb[7][3]);
  53.                         e = str.find(ubb[7][1]);
  54.                         str.erase(e, ubb[7][1].size());
  55.                         str.insert(e, "</a>");
  56.                 }
  57.                 cout<<str<<endl;
  58.         }
  59.         return 0;
  60. }

不知道C++里面有没有正则表达式 于是就自己模拟 - - 如果有的话应该很快 嗯。

  • 无匹配

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter