CSP认证201703-3Markdown[C++题解]:字符串处理、模拟
生活随笔
收集整理的這篇文章主要介紹了
CSP认证201703-3Markdown[C++题解]:字符串处理、模拟
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 題目解答
- 題目鏈接
題目解答
來源:acwing
分析:
這是一道模擬題,但是比較復雜。需要思維建模。
值得注意的點有:
ac代碼
#include<bits/stdc++.h> using namespace std; vector<string> strs;// 處理鏈接 int print_link(string str, int i){string text, link;for( i ++; str[i] != ']'; i ++){char c = str[i];if(c == '_'){text += "<em>";i ++;while(str[i] != '_') text += str[i ++];text += "</em>";}else{text += c;}}// 處理鏈接for(i += 2; str[i] != ')'; i++){link += str[i];}printf("<a href=\"%s\">%s</a>", link.c_str(), text.c_str());return i; }// 處理強調 int print_em(string str, int i){printf("<em>");for(i ++; str[i] != '_'; i++){char c = str[i];if( c == '[') i = print_link(str, i);else cout << c;}printf("</em>");return i; } // 輸出一行 void print_line(string str){// 將前面的空格刪掉int k = 0;while(str[k] == ' ') k++;str = str.substr(k);for(int i= 0; i < str.size(); i ++){char c = str[i];if(c == '_') i = print_em(str, i); // 處理強調else if( c == '[') i = print_link(str, i); // 處理鏈接else cout << c; // 直接輸出} }// 處理a行到b行這一段 void work(int a, int b){//判斷標題if(strs[a][0] == '#'){int k = 0;while(strs[a][k] == '#') k++;printf("<h%d>",k);print_line(strs[a].substr(k));// 處理一行printf("</h%d>\n",k);}else if(strs[a][0] == '*'){printf("<ul>\n");for(int i = a; i <= b; i ++){printf("<li>");print_line(strs[i].substr(1)); //處理一行printf("</li>\n");}printf("</ul>\n");}//段落else{printf("<p>");for(int i = a; i <= b; i ++){print_line(strs[i]); // 處理一行if(i != b) cout << endl;}printf("</p>\n");} }int main(){string str;while(getline(cin, str)) strs.push_back(str);for(int i = 0; i < strs.size(); i ++){//跳過空行if(strs[i].empty()) continue;// 第i行不空的情況// 找到一段int j = i + 1;while(j < strs.size() && strs[j].size()) j ++;work(i, j - 1); // 處理第i行到第j-1行這一段i = j -1; // 處理完后,跳過這一段}}題目鏈接
https://www.acwing.com/problem/content/3247/
總結
以上是生活随笔為你收集整理的CSP认证201703-3Markdown[C++题解]:字符串处理、模拟的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSP认证201703-2学生排队[C+
- 下一篇: CSP认证201703-4地铁修建[C+