{"id":104618,"date":"2026-09-12T20:17:14","date_gmt":"2026-09-12T12:17:14","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/104618.html"},"modified":"2026-09-12T20:17:14","modified_gmt":"2026-09-12T12:17:14","slug":"%e3%80%8a%e7%8e%84%e3%80%8bide-v3-6-3%e9%87%8d%e7%a3%85%e5%8f%91%e5%b8%83%ef%bc%9a%e5%85%a8%e5%8a%9f%e8%83%bd%e4%bf%ae%e5%a4%8d%e4%b8%8e%e6%80%a7%e8%83%bd%e9%a3%9e%e8%b7%83","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/104618.html","title":{"rendered":"\u300a\u7384\u300bIDE v3.6.3\u91cd\u78c5\u53d1\u5e03\uff1a\u5168\u529f\u80fd\u4fee\u590d\u4e0e\u6027\u80fd\u98de\u8dc3"},"content":{"rendered":"<\/p>\n<p>\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\/\/ \u300a\u7384\u300bIDE v3.6.3 \u2014 \u5b8c\u6574\u7248<br \/>\n\/\/   v3.6.3 \u65b0\u589e\/\u4fee\u590d&#xff1a;<br \/>\n\/\/     &#8211; pattern \u8865&#xff1a;\u65e0\u7b26\u53f7\u77ed\u6574\u6570\/\u6574\u6570\/\u957f\u6574\u6570&#xff0c;\u8d85\u957f\/\u957f\/\u77ed\u6574\u6570\u53ca\u6307\u9488\/\u5217\u8868<br \/>\n\/\/     &#8211; \u4fee\u590d\u5d4c\u5957 &#034;\u91cd\u590d&#034; \u751f\u6210\u540c\u540d\u8ba1\u6570\u5668 _i_rep_0&#xff08;\u6539\u7528\u72ec\u7acb\u9012\u589e id&#xff09;<br \/>\n\/\/   v3.6.2 \u4fee\u590d&#xff1a;<br \/>\n\/\/     &#8211; BUG-1: \u5219\/\u5219\u2423 \u524d\u8fb9\u754c\u4fdd\u62a4&#xff08;\u4e0d\u8bef\u4f24 \u539f\u5219\/\u89c4\u5219\/\u6cd5\u5219&#xff09;<br \/>\n\/\/     &#8211; BUG-2: \u68c0\u6d4b\u5230 \u5366 \u65f6\u81ea\u52a8\u6ce8\u5165 srand((unsigned)time(0))<br \/>\n\/\/   v3.6.1 \u4fee\u590d&#xff1a;<br \/>\n\/\/     &#8211; P0: \u5366 A\/B \u626b\u63cf\u3001\u5bf9\u4e8eX\u4eceA\u5230B B \u626b\u63cf\u52a0\u5168\u89d2\u6807\u70b9\u7ec8\u6b62<br \/>\n\/\/ \u94fe\u63a5\u5e93&#xff1a;-lgdi32 -lcomctl32 -lcomdlg32 -static-libstdc&#043;&#043; -static-libgcc<br \/>\n\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/p>\n<p>#define WIN32_LEAN_AND_MEAN<br \/>\n#include &lt;windows.h&gt;<br \/>\n#include &lt;commctrl.h&gt;<br \/>\n#include &lt;commdlg.h&gt;<br \/>\n#include &lt;process.h&gt;<br \/>\n#include &lt;atomic&gt;<br \/>\n#include &lt;string&gt;<br \/>\n#include &lt;vector&gt;<br \/>\n#include &lt;fstream&gt;<br \/>\n#include &lt;sstream&gt;<br \/>\n#include &lt;algorithm&gt;<br \/>\n#include &lt;cstdio&gt;<br \/>\n#include &lt;cstring&gt;<br \/>\n#include &lt;cctype&gt;<\/p>\n<p>using namespace std;<\/p>\n<p>#define IDM_FILE_NEW     1001<br \/>\n#define IDM_FILE_OPEN    1002<br \/>\n#define IDM_FILE_SAVE    1003<br \/>\n#define IDM_FILE_SAVEAS  1004<br \/>\n#define IDM_FILE_EXIT    1005<br \/>\n#define IDM_EDIT_CUT     1011<br \/>\n#define IDM_EDIT_COPY    1012<br \/>\n#define IDM_EDIT_PASTE   1013<br \/>\n#define IDM_RUN_COMPILE  1021<br \/>\n#define IDM_RUN_RUN      1022<br \/>\n#define IDM_RUN_STOP     1023<br \/>\n#define IDM_HELP_MANUAL  1031<br \/>\n#define IDM_HELP_ABOUT   1032<br \/>\n#define IDB_SAVE    201<br \/>\n#define IDB_COMPILE 202<br \/>\n#define IDB_RUN     203<br \/>\n#define IDB_STOP    204<br \/>\n#define IDB_CLEAR   205<\/p>\n<p>#define WM_UPDATE_OUTPUT    (WM_USER &#043; 100)<br \/>\n#define WM_COMPILE_FINISHED (WM_USER &#043; 101)<\/p>\n<p>HWND g_hMainWnd&#061;NULL, g_hEdit&#061;NULL, g_hOutput&#061;NULL, g_hStatusBar&#061;NULL;<br \/>\nHWND g_hBtnSave&#061;NULL, g_hBtnCompile&#061;NULL, g_hBtnRun&#061;NULL, g_hBtnStop&#061;NULL, g_hBtnClear&#061;NULL;<br \/>\nHWND g_hHelpWnd&#061;NULL, g_hHelpEdit&#061;NULL;<br \/>\nHFONT g_hFont&#061;NULL, g_hOutFont&#061;NULL, g_hHelpFont&#061;NULL;<br \/>\nHINSTANCE g_hInst&#061;NULL;<br \/>\nstring g_currentFilePath &#061; &#034;&#034;;<br \/>\nstring g_currentFileName;<br \/>\nstring g_tempDir &#061; &#034;.&#034;;<br \/>\nbool g_isRunning&#061;false, g_isCompiling&#061;false;<\/p>\n<p>static std::atomic&lt;HANDLE&gt; g_hGppProcess{NULL};<br \/>\nstatic std::atomic&lt;HANDLE&gt; g_hOutputProcess{NULL};<br \/>\nstatic std::atomic&lt;bool&gt;   g_stopRequested{false};<\/p>\n<p>\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\/\/ \u7f16\u7801\u8f6c\u6362<br \/>\n\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\nstatic bool cpp_is_utf8() {<br \/>\n    static const int flag &#061; (sizeof(&#034;\u4e2d&#034;) &#061;&#061; 4) ? 1 : 0;<br \/>\n    return flag &#061;&#061; 1;<br \/>\n}<\/p>\n<p>static string to_ansi(const char* s) {<br \/>\n    if (!s || !*s) return string();<br \/>\n    if (!cpp_is_utf8()) return string(s);<br \/>\n    int wlen &#061; MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, s, -1, NULL, 0);<br \/>\n    if (wlen &lt;&#061; 0) return string(s);<br \/>\n    vector&lt;wchar_t&gt; wbuf(wlen);<br \/>\n    MultiByteToWideChar(CP_UTF8, 0, s, -1, &amp;wbuf[0], wlen);<br \/>\n    int alen &#061; WideCharToMultiByte(CP_ACP, 0, &amp;wbuf[0], -1, NULL, 0, NULL, NULL);<br \/>\n    if (alen &lt;&#061; 0) return string(s);<br \/>\n    vector&lt;char&gt; abuf(alen);<br \/>\n    WideCharToMultiByte(CP_ACP, 0, &amp;wbuf[0], -1, &amp;abuf[0], alen, NULL, NULL);<br \/>\n    return string(&amp;abuf[0], alen &#8211; 1);<br \/>\n}<\/p>\n<p>static string to_ansi_n(const char* s, size_t len) {<br \/>\n    if (!s || len &#061;&#061; 0) return string();<br \/>\n    if (!cpp_is_utf8()) return string(s, len);<br \/>\n    int wlen &#061; MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, s, (int)len, NULL, 0);<br \/>\n    if (wlen &lt;&#061; 0) return string(s, len);<br \/>\n    vector&lt;wchar_t&gt; wbuf(wlen);<br \/>\n    MultiByteToWideChar(CP_UTF8, 0, s, (int)len, &amp;wbuf[0], wlen);<br \/>\n    int alen &#061; WideCharToMultiByte(CP_ACP, 0, &amp;wbuf[0], wlen, NULL, 0, NULL, NULL);<br \/>\n    if (alen &lt;&#061; 0) return string(s, len);<br \/>\n    vector&lt;char&gt; abuf(alen);<br \/>\n    WideCharToMultiByte(CP_ACP, 0, &amp;wbuf[0], wlen, &amp;abuf[0], alen, NULL, NULL);<br \/>\n    return string(&amp;abuf[0], alen);<br \/>\n}<\/p>\n<p>static bool looks_like_utf8(const string&amp; s) {<br \/>\n    if (s.size() &gt;&#061; 3 &amp;&amp;<br \/>\n        (unsigned char)s[0] &#061;&#061; 0xEF &amp;&amp;<br \/>\n        (unsigned char)s[1] &#061;&#061; 0xBB &amp;&amp;<br \/>\n        (unsigned char)s[2] &#061;&#061; 0xBF) return true;<br \/>\n    size_t cjk3 &#061; 0;<br \/>\n    for (size_t k &#061; 0; k &#043; 2 &lt; s.size(); &#043;&#043;k) {<br \/>\n        unsigned char c0 &#061; (unsigned char)s[k];<br \/>\n        unsigned char c1 &#061; (unsigned char)s[k&#043;1];<br \/>\n        unsigned char c2 &#061; (unsigned char)s[k&#043;2];<br \/>\n        if (c0 &gt;&#061; 0xE4 &amp;&amp; c0 &lt;&#061; 0xE9 &amp;&amp;<br \/>\n            (c1 &amp; 0xC0) &#061;&#061; 0x80 &amp;&amp; (c2 &amp; 0xC0) &#061;&#061; 0x80) {<br \/>\n            if (&#043;&#043;cjk3 &gt;&#061; 3) return true;<br \/>\n        }<br \/>\n    }<br \/>\n    return false;<br \/>\n}<\/p>\n<p>static string utf8_to_ansi(const string&amp; s) {<br \/>\n    size_t start &#061; 0;<br \/>\n    if (s.size() &gt;&#061; 3 &amp;&amp;<br \/>\n        (unsigned char)s[0] &#061;&#061; 0xEF &amp;&amp;<br \/>\n        (unsigned char)s[1] &#061;&#061; 0xBB &amp;&amp;<br \/>\n        (unsigned char)s[2] &#061;&#061; 0xBF) start &#061; 3;<br \/>\n    if (start &gt;&#061; s.size()) return string();<br \/>\n    int wlen &#061; MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS,<br \/>\n                                   s.c_str() &#043; start, (int)(s.size() &#8211; start), NULL, 0);<br \/>\n    if (wlen &lt;&#061; 0) return s;<br \/>\n    vector&lt;wchar_t&gt; wbuf(wlen);<br \/>\n    MultiByteToWideChar(CP_UTF8, 0, s.c_str() &#043; start,<br \/>\n                        (int)(s.size() &#8211; start), &amp;wbuf[0], wlen);<br \/>\n    int alen &#061; WideCharToMultiByte(CP_ACP, 0, &amp;wbuf[0], wlen, NULL, 0, NULL, NULL);<br \/>\n    if (alen &lt;&#061; 0) return s;<br \/>\n    vector&lt;char&gt; abuf(alen);<br \/>\n    WideCharToMultiByte(CP_ACP, 0, &amp;wbuf[0], wlen, &amp;abuf[0], alen, NULL, NULL);<br \/>\n    return string(&amp;abuf[0], alen);<br \/>\n}<\/p>\n<p>#define XA(s) (to_ansi(s).c_str())<\/p>\n<p>\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\/\/ \u8f85\u52a9<br \/>\n\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\nstatic bool is_ascii_ident(unsigned char c) {<br \/>\n    return (c&gt;&#061;&#039;a&#039;&amp;&amp;c&lt;&#061;&#039;z&#039;) || (c&gt;&#061;&#039;A&#039;&amp;&amp;c&lt;&#061;&#039;Z&#039;) || (c&gt;&#061;&#039;0&#039;&amp;&amp;c&lt;&#061;&#039;9&#039;) || c&#061;&#061;&#039;_&#039;;<br \/>\n}<\/p>\n<p>static size_t advance_one_char(const string&amp; s, size_t pos) {<br \/>\n    if (pos &gt;&#061; s.size()) return 1;<br \/>\n    unsigned char c &#061; (unsigned char)s[pos];<br \/>\n    if (c &lt; 0x80) return 1;<br \/>\n    if ((c &amp; 0xF8) &#061;&#061; 0xF0 &amp;&amp; pos &#043; 3 &lt; s.size() &amp;&amp;<br \/>\n        ((unsigned char)s[pos&#043;1] &amp; 0xC0) &#061;&#061; 0x80 &amp;&amp;<br \/>\n        ((unsigned char)s[pos&#043;2] &amp; 0xC0) &#061;&#061; 0x80 &amp;&amp;<br \/>\n        ((unsigned char)s[pos&#043;3] &amp; 0xC0) &#061;&#061; 0x80) return 4;<br \/>\n    if ((c &amp; 0xF0) &#061;&#061; 0xE0 &amp;&amp; pos &#043; 2 &lt; s.size() &amp;&amp;<br \/>\n        ((unsigned char)s[pos&#043;1] &amp; 0xC0) &#061;&#061; 0x80 &amp;&amp;<br \/>\n        ((unsigned char)s[pos&#043;2] &amp; 0xC0) &#061;&#061; 0x80) return 3;<br \/>\n    if ((c &amp; 0xE0) &#061;&#061; 0xC0 &amp;&amp; pos &#043; 1 &lt; s.size() &amp;&amp;<br \/>\n        ((unsigned char)s[pos&#043;1] &amp; 0xC0) &#061;&#061; 0x80) return 2;<br \/>\n    return 2;<br \/>\n}<\/p>\n<p>static bool ends_with_cjk_hanzi(const string&amp; s) {<br \/>\n    if (s.size() &lt; 2) return false;<br \/>\n    size_t p &#061; s.size();<br \/>\n    while (p &gt; 0) { p&#8211;; if (((unsigned char)s[p] &amp; 0xC0) !&#061; 0x80) break; }<br \/>\n    unsigned char last &#061; (unsigned char)s[p];<br \/>\n    if (last &gt;&#061; 0x80) return true;<br \/>\n    if (p &gt; 0 &amp;&amp; last &gt;&#061; 0x40 &amp;&amp; last &lt;&#061; 0x7E) {<br \/>\n        unsigned char lead &#061; (unsigned char)s[p-1];<br \/>\n        if (lead &gt;&#061; 0x81 &amp;&amp; lead &lt;&#061; 0xFE) return true;<br \/>\n    }<br \/>\n    return false;<br \/>\n}<\/p>\n<p>static bool is_fullwidth_punct_at(const string&amp; s, size_t pos) {<br \/>\n    if (pos &gt;&#061; s.size()) return false;<br \/>\n    unsigned char c &#061; (unsigned char)s[pos];<br \/>\n    if (c &lt; 0x80) return false;<br \/>\n    if (c &gt;&#061; 0xA1 &amp;&amp; c &lt;&#061; 0xA3) return true;<br \/>\n    if (c &#061;&#061; 0xEF) return true;<br \/>\n    if (c &#061;&#061; 0xE3 &amp;&amp; pos &#043; 1 &lt; s.size() &amp;&amp;<br \/>\n        (unsigned char)s[pos&#043;1] &#061;&#061; 0x80) return true;<br \/>\n    return false;<br \/>\n}<\/p>\n<p>\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\/\/ \u6807\u70b9\u8868<br \/>\n\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\nstatic const vector&lt;pair&lt;string,string&gt; &gt;&amp; get_punct_pairs() {<br \/>\n    static vector&lt;pair&lt;string,string&gt; &gt; list;<br \/>\n    static bool ready &#061; false;<br \/>\n    if (!ready) {<br \/>\n        struct { const char* f; const char* t; } raw[] &#061; {<br \/>\n            {&#034;&#xff08;&#034;,&#034;(&#034;},{&#034;&#xff09;&#034;,&#034;)&#034;},{&#034;\u300c&#034;,&#034;[&#034;},{&#034;\u300d&#034;,&#034;]&#034;},<br \/>\n            {&#034;\u3010&#034;,&#034;{&#034;},{&#034;\u3011&#034;,&#034;}&#034;},{&#034;\u300a&#034;,&#034;{&#034;},{&#034;\u300b&#034;,&#034;}&#034;},<br \/>\n            {&#034;&#xff0c;&#034;,&#034;,&#034;},{&#034;\u3001&#034;,&#034;,&#034;},{&#034;&#xff1b;&#034;,&#034;;&#034;},{&#034;&#xff1a;&#034;,&#034; &lt;&lt; &#034;}<br \/>\n        };<br \/>\n        for (size_t i &#061; 0; i &lt; sizeof(raw)\/sizeof(raw[0]); &#043;&#043;i)<br \/>\n            list.push_back(make_pair(to_ansi(raw[i].f), string(raw[i].t)));<br \/>\n        ready &#061; true;<br \/>\n    }<br \/>\n    return list;<br \/>\n}<\/p>\n<p>static const vector&lt;string&gt;&amp; get_punct_list() {<br \/>\n    static vector&lt;string&gt; list;<br \/>\n    static bool ready &#061; false;<br \/>\n    if (!ready) {<br \/>\n        const char* raw[] &#061; {&#034;&#xff1b;&#034;,&#034;&#xff1a;&#034;,&#034;&#xff0c;&#034;,&#034;\u3002&#034;,&#034;\u3001&#034;,&#034;&#xff01;&#034;,&#034;&#xff1f;&#034;,<br \/>\n            &#034;&#xff08;&#034;,&#034;&#xff09;&#034;,&#034;\u3010&#034;,&#034;\u3011&#034;,&#034;\u300c&#034;,&#034;\u300d&#034;,&#034;\u300a&#034;,&#034;\u300b&#034;,&#034;\u3000&#034;};<br \/>\n        for (size_t i &#061; 0; i &lt; sizeof(raw)\/sizeof(raw[0]); &#043;&#043;i)<br \/>\n            list.push_back(to_ansi(raw[i]));<br \/>\n        ready &#061; true;<br \/>\n    }<br \/>\n    return list;<br \/>\n}<\/p>\n<p>static bool is_punct_pattern(const string&amp; from) {<br \/>\n    const vector&lt;string&gt;&amp; L &#061; get_punct_list();<br \/>\n    for (size_t k &#061; 0; k &lt; L.size(); &#043;&#043;k) if (from &#061;&#061; L[k]) return true;<br \/>\n    return false;<br \/>\n}<\/p>\n<p>static bool ends_with_any_punct(const string&amp; s) {<br \/>\n    const vector&lt;string&gt;&amp; L &#061; get_punct_list();<br \/>\n    for (size_t k &#061; 0; k &lt; L.size(); &#043;&#043;k) {<br \/>\n        size_t n &#061; L[k].size();<br \/>\n        if (s.size() &gt;&#061; n &amp;&amp; s.compare(s.size()-n, n, L[k]) &#061;&#061; 0) return true;<br \/>\n    }<br \/>\n    return false;<br \/>\n}<\/p>\n<p>static bool is_cjk_terminator_at(const string&amp; s, size_t pos) {<br \/>\n    const vector&lt;string&gt;&amp; L &#061; get_punct_list();<br \/>\n    for (size_t k &#061; 0; k &lt; L.size(); &#043;&#043;k) {<br \/>\n        size_t n &#061; L[k].size();<br \/>\n        if (pos &#043; n &lt;&#061; s.size() &amp;&amp; s.compare(pos, n, L[k]) &#061;&#061; 0)<br \/>\n            return true;<br \/>\n    }<br \/>\n    return false;<br \/>\n}<\/p>\n<p>static string translate_punct_only(const string&amp; s) {<br \/>\n    const vector&lt;pair&lt;string,string&gt; &gt;&amp; subs &#061; get_punct_pairs();<br \/>\n    string r &#061; s;<br \/>\n    for (size_t k &#061; 0; k &lt; subs.size(); &#043;&#043;k) {<br \/>\n        const string&amp; from &#061; subs[k].first;<br \/>\n        const string&amp; to   &#061; subs[k].second;<br \/>\n        if (from.empty()) continue;<br \/>\n        size_t flen &#061; from.size(), tlen &#061; to.size(), pos &#061; 0;<br \/>\n        while ((pos &#061; r.find(from, pos)) !&#061; string::npos) {<br \/>\n            r.replace(pos, flen, to);<br \/>\n            pos &#043;&#061; tlen;<br \/>\n        }<br \/>\n    }<br \/>\n    return r;<br \/>\n}<\/p>\n<p>static const char* GetFilterAnsi() {<br \/>\n    static const char RAW[] &#061; &#034;\u7384\u6e90\u6587\u4ef6\\\\0*.\u7384\\\\0\u6240\u6709\u6587\u4ef6\\\\0*.*\\\\0&#034;;<br \/>\n    static const string ANSI &#061; to_ansi_n(RAW, sizeof(RAW) &#8211; 1);<br \/>\n    return ANSI.c_str();<br \/>\n}<\/p>\n<p>static const char* GetDefExtAnsi() {<br \/>\n    static const string s &#061; to_ansi(&#034;\u7384&#034;);<br \/>\n    return s.c_str();<br \/>\n}<\/p>\n<p>\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\/\/ \u7528\u6cd5\u5927\u5168<br \/>\n\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\nconst char* HELP_TEXT &#061;<br \/>\n&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;\\\\n&#034;<br \/>\n&#034;                \u300a\u7384\u300b\u8bed\u8a00\u7528\u6cd5\u5927\u5168 v3.6.3\\\\n&#034;<br \/>\n&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;\\\\n&#034;<br \/>\n&#034;\\\\n&#034;<br \/>\n&#034;\u30101 \u6587\u4ef6\u7ed3\u6784\u3011\\\\n&#034;<br \/>\n&#034;\u5934\u6587\u4ef6\u300a\u6807\u51c6IO\u300b\\\\n&#034;<br \/>\n&#034;\u4f7f\u7528\u547d\u540d\u7a7a\u95f4\u6807\u51c6&#xff1b;\\\\n&#034;<br \/>\n&#034;\u4e3b\u7a0b\u5e8f&#xff1a;\\\\n&#034;<br \/>\n&#034;    \u4ee3\u7801&#8230;\\\\n&#034;<br \/>\n&#034;\u3002\\\\n&#034;<br \/>\n&#034;\u63d0\u793a&#xff1a;\u5173\u952e\u5b57\u540e\u5efa\u8bae\u8ddf\u7a7a\u683c\u6216\u5168\u89d2\u6807\u70b9\u3002\\\\n&#034;<br \/>\n&#034;      \u6807\u8bc6\u7b26\u4e2d\u5982\u5305\u542b\u5173\u952e\u5b57&#xff0c;\u53ef\u7528 \\\\\\\\ \u8f6c\u4e49\u3002\\\\n&#034;<br \/>\n&#034;\\\\n&#034;<br \/>\n&#034;\u30102 \u5934\u6587\u4ef6\u3011&#xff08;35 \u4e2a&#xff09;\\\\n&#034;<br \/>\n&#034;  \u57fa\u7840&#xff1a;\u6807\u51c6IO \/ \u5b57\u7b26\u4e32 \/ \u5411\u91cf \/ \u5185\u5b58\\\\n&#034;<br \/>\n&#034;  \u7b97\u6cd5&#xff1a;\u7b97\u6cd5 \/ \u6570\u5b66 \/ \u6570\u503c \/ \u968f\u673a\u6570 \/ \u968f\u673a\\\\n&#034;<br \/>\n&#034;  \u5bb9\u5668&#xff1a;\u6620\u5c04 \/ \u5b57\u5178 \/ \u96c6\u5408 \/ \u961f\u5217 \/ \u6808 \/ \u94fe\u8868 \/ \u6570\u7ec4 \/ \u53cc\u7aef\u961f\u5217\\\\n&#034;<br \/>\n&#034;  \u5de5\u5177&#xff1a;\u5143\u7ec4 \/ \u5bf9\u7ec4 \/ \u5de5\u5177 \/ \u51fd\u6570 \/ \u65f6\u95f4\\\\n&#034;<br \/>\n&#034;  \u5e76\u53d1&#xff1a;\u7ebf\u7a0b \/ \u4e92\u65a5 \/ \u4e92\u65a5\u9501 \/ \u539f\u5b50 \/ \u6761\u4ef6\u53d8\u91cf\\\\n&#034;<br \/>\n&#034;  \u8f93\u5165&#xff1a;\u6587\u4ef6 \/ \u6587\u4ef6\u6d41 \/ \u5b57\u7b26\u4e32\u6d41 \/ \u6d41\u683c\u5f0f \/ \u5f02\u5e38 \/ \u8fed\u4ee3\u5668\\\\n&#034;<br \/>\n&#034;  \u5176\u4ed6&#xff1a;\u4f4d\u96c6 \/ \u590d\u6570\\\\n&#034;<br \/>\n&#034;\\\\n&#034;<br \/>\n&#034;\u30103 \u547d\u540d\u7a7a\u95f4\u3011\\\\n&#034;<br \/>\n&#034;\u4f7f\u7528\u547d\u540d\u7a7a\u95f4\u6807\u51c6&#xff1b;       -&gt; using namespace std;\\\\n&#034;<br \/>\n&#034;\u4f7f\u7528\u547d\u540d\u7a7a\u95f4 \u6211\u7684\u5e93&#xff1b;     -&gt; using namespace \u6211\u7684\u5e93;\\\\n&#034;<br \/>\n&#034;\\\\n&#034;<br \/>\n&#034;\u30104 \u57fa\u672c\u7c7b\u578b\u3011\\\\n&#034;<br \/>\n&#034;\u6574\u6570 int \/ \u6d6e\u70b9 float \/ \u53cc\u7cbe\u5ea6 double \/ \u5b57\u7b26 char\\\\n&#034;<br \/>\n&#034;\u5e03\u5c14 bool \/ \u6587\u672c std::string \/ \u5b57\u7b26\u4e32 std::string \/ \u65e0 void\\\\n&#034;<br \/>\n&#034;\u771f true \/ \u5047 false \/ \u5b9a\u4e49 int\\\\n&#034;<br \/>\n&#034;\u77ed\u6574\u6570 short \/ \u957f\u6574\u6570 long long \/ \u8d85\u957f\u6574\u6570 long long\\\\n&#034;<br \/>\n&#034;\u65e0\u7b26\u53f7\u6574\u6570 unsigned int \/ \u65e0\u7b26\u53f7\u77ed\u6574\u6570 unsigned short\\\\n&#034;<br \/>\n&#034;\u65e0\u7b26\u53f7\u957f\u6574\u6570 unsigned long long\\\\n&#034;<br \/>\n&#034;\\\\n&#034;<br \/>\n&#034;\u30105 \u5bb9\u5668\u7c7b\u578b\u522b\u540d\u3011\\\\n&#034;<br \/>\n&#034;\u6574\u6570\u6620\u5c04 \/ \u6587\u672c\u6620\u5c04 \/ \u6574\u6570\u96c6\u5408 \/ \u6587\u672c\u96c6\u5408\\\\n&#034;<br \/>\n&#034;\u6574\u6570\u961f\u5217 \/ \u6587\u672c\u961f\u5217 \/ \u6574\u6570\u6808 \/ \u6587\u672c\u6808\\\\n&#034;<br \/>\n&#034;\u6574\u6570\u5bf9 \/ \u6587\u672c\u5bf9 \/ \u6574\u6570\u53cc\u7aef\u961f\u5217\\\\n&#034;<br \/>\n&#034;\u6574\u6570\u5217\u8868 \/ \u6587\u672c\u5217\u8868 \/ \u6d6e\u70b9\u5217\u8868\\\\n&#034;<br \/>\n&#034;\u77ed\u6574\u6570\u5217\u8868 \/ \u957f\u6574\u6570\u5217\u8868 \/ \u8d85\u957f\u6574\u6570\u5217\u8868\\\\n&#034;<br \/>\n&#034;\\\\n&#034;<br \/>\n&#034;\u30106 \u8f93\u5165\u8f93\u51fa\u3011\\\\n&#034;<br \/>\n&#034;\u8f93\u51fa&#xff1a;\\\\&#034;\u4f60\u597d\\\\&#034;&#xff1a;\u6362\u884c&#xff1b;\\\\n&#034;<br \/>\n&#034;\u8f93\u5165&#xff1a;a&#xff1b;\\\\n&#034;<br \/>\n&#034;\u5168\u89d2\u5192\u53f7&#xff08;&#xff1a;&#xff09;\u7ffb\u8bd1\u4e3a &lt;&lt;\\\\n&#034;<br \/>\n&#034;\\\\n&#034;<br \/>\n&#034;\u30107 \u8fd0\u7b97\u7b26\u3011\\\\n&#034;<br \/>\n&#034;\u6bd4\u8f83&#xff1a;\u5c0f\u4e8e &lt;  \u5927\u4e8e &gt;  \u4e0d\u5927\u4e8e &lt;&#061;  \u4e0d\u5c0f\u4e8e &gt;&#061;\\\\n&#034;<br \/>\n&#034;      \u7b49\u4e8e &#061;&#061;  \u4e0d\u7b49\u4e8e !&#061;  \u6bd4&#8230;\u5c0f &lt;  \u6bd4&#8230;\u5927 &gt;\\\\n&#034;<br \/>\n&#034;      \u6bd4&#8230;\u5c0f \u5141\u8bb8\u8de8\u884c\u3001\u7d27\u51d1\u5199\u6cd5&#xff08;i\u6bd4a\u5c0f&#xff09;\\\\n&#034;<br \/>\n&#034;\u903b\u8f91&#xff1a;\u4e0e\/\u4e14 &amp;&amp;  \u6216\/\u6216\u8005 ||  \u975e !\\\\n&#034;<br \/>\n&#034;\u7b97\u672f&#xff1a;\u52a0 &#043;  \u51cf &#8211;  \u4e58 *  \u9664 \/  \u6a21 %  \u9012\u589e &#043;&#043;  \u9012\u51cf &#8211;\\\\n&#034;<br \/>\n&#034;\u5927\u5c0f&#xff1a;\u5927\u5c0f&#xff08;T&#xff09; \/ \u5b57\u8282\u6570&#xff08;T&#xff09;   -&gt; sizeof(T)\\\\n&#034;<br \/>\n&#034;\\\\n&#034;<br \/>\n&#034;\u30108 \u63a7\u5236\u6d41\u3011\\\\n&#034;<br \/>\n&#034;\u5982\u679c&#xff08;\u6761\u4ef6&#xff09;\u300a&#8230;\u300b \u5426\u5219\u5982\u679c\u300a&#8230;\u300b \u5426\u5219\u300a&#8230;\u300b\\\\n&#034;<br \/>\n&#034;\u5bf9\u4e8e&#xff08;\u6574\u6570 i&#061;0&#xff1b;i \u5c0f\u4e8e 10&#xff1b;i \u9012\u589e&#xff09;\u300a&#8230;\u300b\\\\n&#034;<br \/>\n&#034;\u53ea\u8981&#xff08;\u6761\u4ef6&#xff09;\u300a&#8230;\u300b \/ \u5f53&#xff08;\u6761\u4ef6&#xff09;\u300a&#8230;\u300b\\\\n&#034;<br \/>\n&#034;\u8df3\u51fa break \/ \u7ee7\u7eed continue \/ \u8fd4\u56de return\\\\n&#034;<br \/>\n&#034;\\\\n&#034;<br \/>\n&#034;\u30109 \u7384\u72ec\u6709\u8bed\u6cd5\u3011\\\\n&#034;<br \/>\n&#034;  \u25cf \u91cd\u590d N \u6b21\\\\n&#034;<br \/>\n&#034;      \u91cd\u590d 3 \u6b21 \u300a \u8f93\u51fa&#xff1a;\\\\&#034;\u4f60\u597d\\\\&#034;&#xff1a;\u6362\u884c&#xff1b; \u300b\\\\n&#034;<br \/>\n&#034;\\\\n&#034;<br \/>\n&#034;  \u25cf \u5bf9\u4e8e X \u4ece A \u5230 B&#xff08;\u95ed\u533a\u95f4&#xff09;\\\\n&#034;<br \/>\n&#034;      \u5bf9\u4e8e i \u4ece 1 \u5230 5 \u300a \u8f93\u51fa&#xff1a;i&#xff1a;\u6362\u884c&#xff1b; \u300b\\\\n&#034;<br \/>\n&#034;      \u5bf9\u4e8e i \u4ece 3 \u5230 1 \u9012\u51cf \u300a &#8230; \u300b\\\\n&#034;<br \/>\n&#034;\\\\n&#034;<br \/>\n&#034;  \u25cf \u82e5 C \u5219 S&#xff1b;\u5426\u5219\u82e5 C \u5219 S&#xff1b;\u5426\u5219 S&#xff1b;\\\\n&#034;<br \/>\n&#034;      \u82e5 \u5206\u6570 \u5927\u4e8e 90 \u5219 \u8f93\u51fa&#xff1a;\\\\&#034;\u4f18\\\\&#034;&#xff1a;\u6362\u884c&#xff1b;\\\\n&#034;<br \/>\n&#034;      \u5426\u5219\u82e5 \u5206\u6570 \u5927\u4e8e 60 \u5219 \u8f93\u51fa&#xff1a;\\\\&#034;\u53ca\u683c\\\\&#034;&#xff1a;\u6362\u884c&#xff1b;\\\\n&#034;<br \/>\n&#034;      \u5426\u5219 \u8f93\u51fa&#xff1a;\\\\&#034;\u4e0d\u53ca\u683c\\\\&#034;&#xff1a;\u6362\u884c&#xff1b;\\\\n&#034;<br \/>\n&#034;      \u6ce8\u610f&#xff1a;\\\\&#034;\u82e5\\\\&#034;\/\\\\&#034;\u5219\\\\&#034;\u524d\u540e\u8981\u6709\u7a7a\u683c\u3002\\\\n&#034;<br \/>\n&#034;\\\\n&#034;<br \/>\n&#034;  \u25cf \u73af \u300a&#8230;\u300b        \u65e0\u9650\u5faa\u73af\\\\n&#034;<br \/>\n&#034;\\\\n&#034;<br \/>\n&#034;  \u25cf \u5366 N \/ \u5366 A \u5230 B  \u968f\u673a\u6570&#xff08;\u81ea\u52a8 srand&#xff09;\\\\n&#034;<br \/>\n&#034;      \u5366 6          -&gt; \u8303\u56f4 0..5\\\\n&#034;<br \/>\n&#034;      \u5366 1 \u5230 6     -&gt; \u8303\u56f4 1..6\\\\n&#034;<br \/>\n&#034;\\\\n&#034;<br \/>\n&#034;  \u25cf \u627f                \u7ee7\u627f\\\\n&#034;<br \/>\n&#034;  \u25cf \u6b64 \u7684 \/ \u7684         \u6210\u5458\u8bbf\u95ee\\\\n&#034;<br \/>\n&#034;\\\\n&#034;<br \/>\n&#034;\u301010 \u7c7b\u4e0e\u7ed3\u6784\u3011\\\\n&#034;<br \/>\n&#034;\u7c7b \u5b66\u751f \u300a \u516c\u5f00&#xff1a; &#8230; \u7ee7\u627f&#xff1a;\u7c7b \u5927\u5b66\u751f \u627f \u5b66\u751f \u300a &#8230; \u300b\\\\n&#034;<br \/>\n&#034;\\\\n&#034;<br \/>\n&#034;\u301011 \u6307\u9488\u3011\\\\n&#034;<br \/>\n&#034;\u6574\u6570\u6307\u9488 \/ \u77ed\u6574\u6570\u6307\u9488 \/ \u957f\u6574\u6570\u6307\u9488 \/ \u8d85\u957f\u6574\u6570\u6307\u9488\\\\n&#034;<br \/>\n&#034;\u53d6\u5730\u5740 \/ \u53d6\u5185\u5bb9 \/ \u7a7a\u6307\u9488 \/ \u65b0\u5efa \/ \u91ca\u653e\\\\n&#034;<br \/>\n&#034;\\\\n&#034;<br \/>\n&#034;\u301012 \u52a8\u6001\u5185\u5b58\u3011\\\\n&#034;<br \/>\n&#034;\u65b0\u5efa \u6574\u6570&#xff08;100&#xff09; \/ \u65b0\u5efa\u6570\u7ec4 \u6574\u6570\u300c10\u300d \/ \u91ca\u653e p\\\\n&#034;<br \/>\n&#034;\\\\n&#034;<br \/>\n&#034;\u301013 \u5bb9\u5668\u521d\u59cb\u5316 \/ \u7d22\u5f15\u3011\\\\n&#034;<br \/>\n&#034;\u6574\u6570\u5217\u8868 v &#061; \u30101&#xff0c; 2&#xff0c; 3\u3011&#xff1b; v\u300c0\u300d -&gt; v[0]\\\\n&#034;<br \/>\n&#034;\\\\n&#034;<br \/>\n&#034;\u301014 \u5934\u6587\u4ef6\u5bf9\u7167\u8868\u3011\\\\n&#034;<br \/>\n&#034;  \u6807\u51c6IO -&gt; iostream &#043; string &#043; vector &#043; memory &#043; cstdlib\\\\n&#034;<br \/>\n&#034;  \u5176\u4f59 34 \u4e2a\u89c1\u6e90\u7801\\\\n&#034;<br \/>\n&#034;\\\\n&#034;<br \/>\n&#034;\u301015 \u5e38\u89c1\u9519\u8bef\u3011\\\\n&#034;<br \/>\n&#034;1. \u5fd8\u8bb0\u5199 \u5934\u6587\u4ef6\u300a\u6807\u51c6IO\u300b\\\\n&#034;<br \/>\n&#034;2. \u5fd8\u8bb0\u5199 \u4f7f\u7528\u547d\u540d\u7a7a\u95f4\u6807\u51c6&#xff1b;\\\\n&#034;<br \/>\n&#034;3. \u5b57\u7b26\u4e32\u7528\u4e2d\u6587\u5f15\u53f7 \u201c\u201d \u2014\u2014 \u5fc5\u987b\u7528\u82f1\u6587\u5f15\u53f7 \\\\&#034;\\\\&#034;\\\\n&#034;<br \/>\n&#034;4. \u7f3a\u5c11\u4e3b\u7a0b\u5e8f\u7ed3\u5c3e\u7684\u53e5\u53f7 \u3002\\\\n&#034;<br \/>\n&#034;5. \u7d22\u5f15\u7528 \u3010\u3011 \u4f1a\u9519 \u2014\u2014 \u7d22\u5f15\u7528 \u300c\u300d&#xff0c;\u521d\u59cb\u5316\u7528 \u3010\u3011\\\\n&#034;<br \/>\n&#034;6. \u5173\u952e\u5b57\u4e0e\u4e2d\u6587\u53d8\u91cf\u540d\u7c98\u8fde \u2014\u2014 \u4e2d\u95f4\u52a0\u7a7a\u683c\u6216\u5168\u89d2\u6807\u70b9\\\\n&#034;<br \/>\n&#034;7. \\\\&#034;\u82e5\\\\&#034; \/ \\\\&#034;\u5219\\\\&#034; \/ \\\\&#034;\u5426\u5219\u82e5\\\\&#034; \/ \\\\&#034;\u6b64 \u7684\\\\&#034; \/ \\\\&#034; \u7684 \\\\&#034; \u524d\u540e\u8981\u7a7a\u683c\\\\n&#034;<br \/>\n&#034;\\\\n&#034;<br \/>\n&#034;                       \u300a\u7384\u300bIDE v3.6.3\\\\n&#034;<br \/>\n&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;\\\\n&#034;;<\/p>\n<p>\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\/\/ \u6587\u4ef6\u5de5\u5177<br \/>\n\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\nstring read_file(const string&amp; path) {<br \/>\n    ifstream f(path.c_str(), ios::binary);<br \/>\n    if (!f) return &#034;&#034;;<br \/>\n    stringstream ss; ss &lt;&lt; f.rdbuf();<br \/>\n    return ss.str();<br \/>\n}<br \/>\nvoid write_file(const string&amp; path, const string&amp; content) {<br \/>\n    ofstream f(path.c_str(), ios::binary);<br \/>\n    f &lt;&lt; content;<br \/>\n}<\/p>\n<p>\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\/\/ \u6784\u5efa pattern<br \/>\n\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\nstatic void build_patterns(vector&lt;pair&lt;string,string&gt; &gt;&amp; patterns) {<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u6807\u51c6IO\u300b&#034;), string(&#034;#include &lt;iostream&gt;\\\\n#include &lt;string&gt;\\\\n#include &lt;vector&gt;\\\\n#include &lt;memory&gt;\\\\n#include &lt;cstdlib&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u5b57\u7b26\u4e32\u300b&#034;), string(&#034;#include &lt;string&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u5411\u91cf\u300b&#034;),   string(&#034;#include &lt;vector&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u5185\u5b58\u300b&#034;),   string(&#034;#include &lt;memory&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u7b97\u6cd5\u300b&#034;),   string(&#034;#include &lt;algorithm&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u6570\u5b66\u300b&#034;),   string(&#034;#include &lt;cmath&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u6570\u503c\u300b&#034;),   string(&#034;#include &lt;numeric&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u968f\u673a\u6570\u300b&#034;), string(&#034;#include &lt;random&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u968f\u673a\u300b&#034;),   string(&#034;#include &lt;random&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u6620\u5c04\u300b&#034;),   string(&#034;#include &lt;map&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u5b57\u5178\u300b&#034;),   string(&#034;#include &lt;map&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u96c6\u5408\u300b&#034;),   string(&#034;#include &lt;set&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u961f\u5217\u300b&#034;),   string(&#034;#include &lt;queue&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u6808\u300b&#034;),     string(&#034;#include &lt;stack&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u94fe\u8868\u300b&#034;),   string(&#034;#include &lt;list&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u6570\u7ec4\u300b&#034;),   string(&#034;#include &lt;array&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u53cc\u7aef\u961f\u5217\u300b&#034;),string(&#034;#include &lt;deque&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u5143\u7ec4\u300b&#034;),   string(&#034;#include &lt;tuple&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u5bf9\u7ec4\u300b&#034;),   string(&#034;#include &lt;utility&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u5de5\u5177\u300b&#034;),   string(&#034;#include &lt;utility&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u51fd\u6570\u300b&#034;),   string(&#034;#include &lt;functional&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u65f6\u95f4\u300b&#034;),   string(&#034;#include &lt;chrono&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u7ebf\u7a0b\u300b&#034;),   string(&#034;#include &lt;thread&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u4e92\u65a5\u9501\u300b&#034;), string(&#034;#include &lt;mutex&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u4e92\u65a5\u300b&#034;),   string(&#034;#include &lt;mutex&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u539f\u5b50\u300b&#034;),   string(&#034;#include &lt;atomic&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u6761\u4ef6\u53d8\u91cf\u300b&#034;),string(&#034;#include &lt;condition_variable&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u6587\u4ef6\u6d41\u300b&#034;), string(&#034;#include &lt;fstream&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u6587\u4ef6\u300b&#034;),   string(&#034;#include &lt;fstream&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u5b57\u7b26\u4e32\u6d41\u300b&#034;),string(&#034;#include &lt;sstream&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u6d41\u683c\u5f0f\u300b&#034;), string(&#034;#include &lt;iomanip&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u5f02\u5e38\u300b&#034;),   string(&#034;#include &lt;stdexcept&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u8fed\u4ee3\u5668\u300b&#034;), string(&#034;#include &lt;iterator&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u4f4d\u96c6\u300b&#034;),   string(&#034;#include &lt;bitset&gt;\\\\n&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5934\u6587\u4ef6\u300a\u590d\u6570\u300b&#034;),   string(&#034;#include &lt;complex&gt;\\\\n&#034;)));<\/p>\n<p>    patterns.push_back(make_pair(to_ansi(&#034;\u4f7f\u7528\u547d\u540d\u7a7a\u95f4\u6807\u51c6&#xff1b;&#034;), string(&#034;using namespace std;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u4f7f\u7528\u547d\u540d\u7a7a\u95f4\u6807\u51c6&#034;),   string(&#034;using namespace std&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u4f7f\u7528\u547d\u540d\u7a7a\u95f4&#034;),       string(&#034;using namespace &#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u547d\u540d\u7a7a\u95f4&#034;),           string(&#034;namespace &#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u4e3b\u7a0b\u5e8f&#xff1a;&#034;), string(&#034;int main() {&#034;)));<\/p>\n<p>    patterns.push_back(make_pair(to_ansi(&#034;\u8f93\u51fa&#xff1a;&#034;), string(&#034;std::cout &lt;&lt; &#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u8f93\u51fa&#034;),   string(&#034;std::cout &lt;&lt; &#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u8f93\u5165&#xff1a;&#034;), string(&#034;std::cin &gt;&gt; &#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u8f93\u5165&#034;),   string(&#034;std::cin &gt;&gt; &#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u6362\u884c&#034;),   string(&#034;std::endl&#034;)));<\/p>\n<p>    patterns.push_back(make_pair(to_ansi(&#034;\u6574\u6570\u53cc\u7aef\u961f\u5217&#034;), string(&#034;std::deque&lt;int&gt;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u6574\u6570\u6620\u5c04&#034;),     string(&#034;std::map&lt;int,int&gt;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u6587\u672c\u6620\u5c04&#034;),     string(&#034;std::map&lt;std::string,std::string&gt;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u6574\u6570\u96c6\u5408&#034;),     string(&#034;std::set&lt;int&gt;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u6587\u672c\u96c6\u5408&#034;),     string(&#034;std::set&lt;std::string&gt;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u6574\u6570\u961f\u5217&#034;),     string(&#034;std::queue&lt;int&gt;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u6587\u672c\u961f\u5217&#034;),     string(&#034;std::queue&lt;std::string&gt;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u6574\u6570\u6808&#034;),       string(&#034;std::stack&lt;int&gt;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u6587\u672c\u6808&#034;),       string(&#034;std::stack&lt;std::string&gt;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u6574\u6570\u5bf9&#034;),       string(&#034;std::pair&lt;int,int&gt;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u6587\u672c\u5bf9&#034;),       string(&#034;std::pair&lt;std::string,std::string&gt;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u6574\u6570\u5217\u8868&#034;),     string(&#034;std::vector&lt;int&gt;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u6587\u672c\u5217\u8868&#034;),     string(&#034;std::vector&lt;std::string&gt;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u6d6e\u70b9\u5217\u8868&#034;),     string(&#034;std::vector&lt;float&gt;&#034;)));<\/p>\n<p>    \/\/ &#8212;- v3.6.3 \u8865&#xff1a;\u957f\u77ed\u6574\u6570\u3001\u65e0\u7b26\u53f7 &#8212;-<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u65e0\u7b26\u53f7\u957f\u6574\u6570&#034;),   string(&#034;unsigned long long&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u65e0\u7b26\u53f7\u77ed\u6574\u6570&#034;),   string(&#034;unsigned short&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u65e0\u7b26\u53f7\u6574\u6570&#034;),     string(&#034;unsigned int&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u8d85\u957f\u6574\u6570\u6307\u9488&#034;),   string(&#034;long long*&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u957f\u6574\u6570\u6307\u9488&#034;),     string(&#034;long long*&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u77ed\u6574\u6570\u6307\u9488&#034;),     string(&#034;short*&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u8d85\u957f\u6574\u6570\u5217\u8868&#034;),   string(&#034;std::vector&lt;long long&gt;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u957f\u6574\u6570\u5217\u8868&#034;),     string(&#034;std::vector&lt;long long&gt;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u77ed\u6574\u6570\u5217\u8868&#034;),     string(&#034;std::vector&lt;short&gt;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u8d85\u957f\u6574\u6570&#034;),       string(&#034;long long&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u957f\u6574\u6570&#034;),         string(&#034;long long&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u77ed\u6574\u6570&#034;),         string(&#034;short&#034;)));<\/p>\n<p>    patterns.push_back(make_pair(to_ansi(&#034;\u6574\u6570\u6307\u9488&#034;),   string(&#034;int*&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u6587\u672c\u6307\u9488&#034;),   string(&#034;std::string*&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u6d6e\u70b9\u6307\u9488&#034;),   string(&#034;float*&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u53cc\u7cbe\u5ea6\u6307\u9488&#034;), string(&#034;double*&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5b57\u7b26\u6307\u9488&#034;),   string(&#034;char*&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5e03\u5c14\u6307\u9488&#034;),   string(&#034;bool*&#034;)));<\/p>\n<p>    patterns.push_back(make_pair(to_ansi(&#034;\u6574\u6570&#034;),   string(&#034;int&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u6d6e\u70b9&#034;),   string(&#034;float&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u53cc\u7cbe\u5ea6&#034;), string(&#034;double&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5b57\u7b26&#034;),   string(&#034;char&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5e03\u5c14&#034;),   string(&#034;bool&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u6587\u672c&#034;),   string(&#034;std::string&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5b57\u7b26\u4e32&#034;), string(&#034;std::string&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u65e0&#034;),     string(&#034;void&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5b9a\u4e49&#034;),   string(&#034;int&#034;)));<\/p>\n<p>    patterns.push_back(make_pair(to_ansi(&#034;\u53d6\u5730\u5740&#034;),   string(&#034;&amp;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u53d6\u5740&#034;),     string(&#034;&amp;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u53d6\u5185\u5bb9&#034;),   string(&#034;*&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u89e3\u5f15\u7528&#034;),   string(&#034;*&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u7a7a\u6307\u9488&#034;),   string(&#034;nullptr&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u65b0\u5efa\u6570\u7ec4&#034;), string(&#034;new &#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u65b0\u5efa&#034;),     string(&#034;new &#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u91ca\u653e\u6570\u7ec4&#034;), string(&#034;delete[] &#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u91ca\u653e&#034;),     string(&#034;delete &#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5e38\u91cf&#034;),     string(&#034;const &#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u9759\u6001&#034;),     string(&#034;static &#034;)));<\/p>\n<p>    patterns.push_back(make_pair(to_ansi(&#034;\u4e0d\u5927\u4e8e&#034;), string(&#034;&lt;&#061;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u4e0d\u5c0f\u4e8e&#034;), string(&#034;&gt;&#061;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5c0f\u4e8e&#034;),   string(&#034;&lt;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5927\u4e8e&#034;),   string(&#034;&gt;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u7b49\u4e8e&#034;),   string(&#034;&#061;&#061;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u4e0d\u7b49\u4e8e&#034;), string(&#034;!&#061;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u4e0e&#034;),     string(&#034;&amp;&amp;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u4e14&#034;),     string(&#034;&amp;&amp;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u6216\u8005&#034;),   string(&#034;||&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u6216&#034;),     string(&#034;||&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u975e&#034;),     string(&#034;!&#034;)));<\/p>\n<p>    patterns.push_back(make_pair(to_ansi(&#034;\u9012\u589e&#034;), string(&#034;&#043;&#043;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u9012\u51cf&#034;), string(&#034;&#8211;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u52a0&#034;),   string(&#034;&#043;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u51cf&#034;),   string(&#034;-&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u4e58&#034;),   string(&#034;*&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u9664&#034;),   string(&#034;\/&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u6a21&#034;),   string(&#034;%&#034;)));<\/p>\n<p>    patterns.push_back(make_pair(to_ansi(&#034;\u300a&#034;), string(&#034;{&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u300b&#034;), string(&#034;}&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u3010&#034;), string(&#034;{&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u3011&#034;), string(&#034;}&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u300c&#034;), string(&#034;[&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u300d&#034;), string(&#034;]&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;&#xff08;&#034;), string(&#034;(&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;&#xff09;&#034;), string(&#034;)&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;&#xff1b;&#034;), string(&#034;;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;&#xff1a;&#034;), string(&#034; &lt;&lt; &#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u3002&#034;), string(&#034;}&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;&#xff0c;&#034;), string(&#034;,&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u3001&#034;), string(&#034;,&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;&#xff01;&#034;), string(&#034;!&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;&#xff1f;&#034;), string(&#034;?&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u3000&#034;), string(&#034; &#034;)));<\/p>\n<p>    patterns.push_back(make_pair(to_ansi(&#034;\u5426\u5219\u5982\u679c&#034;), string(&#034;else if &#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5426\u5219&#034;),     string(&#034;else &#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5982\u679c&#034;),     string(&#034;if &#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5bf9\u4e8e&#034;),     string(&#034;for &#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u53ea\u8981&#034;),     string(&#034;while &#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5f53&#034;),       string(&#034;while &#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u8df3\u51fa&#034;),     string(&#034;break&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u7ee7\u7eed&#034;),     string(&#034;continue&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u8fd4\u56de&#034;),     string(&#034;return &#034;)));<\/p>\n<p>    patterns.push_back(make_pair(to_ansi(&#034;\u7c7b&#034;),     string(&#034;class &#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u7ed3\u6784&#034;),   string(&#034;struct &#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u679a\u4e3e&#034;),   string(&#034;enum &#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u7ee7\u627f&#034;),   string(&#034;: public &#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u516c\u5f00&#034;),   string(&#034;public:&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u516c\u6709&#034;),   string(&#034;public:&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u79c1\u6709&#034;),   string(&#034;private:&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u4fdd\u62a4&#034;),   string(&#034;protected:&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u865a\u51fd\u6570&#034;), string(&#034;virtual &#034;)));<\/p>\n<p>    patterns.push_back(make_pair(to_ansi(&#034;\u771f&#034;), string(&#034;true&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5047&#034;), string(&#034;false&#034;)));<\/p>\n<p>    patterns.push_back(make_pair(to_ansi(&#034;\u5426\u5219\u82e5 &#034;), string(&#034;else if (&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u82e5 &#034;),     string(&#034;if (&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5219 &#034;),     string(&#034;) &#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5219&#034;),      string(&#034;)&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u627f&#034;),      string(&#034;: public &#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u6b64 \u7684 &#034;),  string(&#034;this-&gt;&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034; \u7684 &#034;),    string(&#034;. &#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5b57\u8282\u6570&#xff08;&#034;), string(&#034;sizeof(&#034;)));<br \/>\n    patterns.push_back(make_pair(to_ansi(&#034;\u5927\u5c0f&#xff08;&#034;),   string(&#034;sizeof(&#034;)));<\/p>\n<p>    sort(patterns.begin(), patterns.end(),<br \/>\n         [](const pair&lt;string, string&gt;&amp; a, const pair&lt;string, string&gt;&amp; b) {<br \/>\n             return a.first.size() &gt; b.first.size();<br \/>\n         });<br \/>\n}<\/p>\n<p>\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\/\/ \u8f6c\u8bd1\u6838\u5fc3<br \/>\n\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\nstring translate_xuan(const string&amp; src) {<br \/>\n    static vector&lt;pair&lt;string,string&gt; &gt; patterns;<br \/>\n    static bool patterns_ready &#061; false;<br \/>\n    if (!patterns_ready) { build_patterns(patterns); patterns_ready &#061; true; }<\/p>\n<p>    static string BI, XIAO, DA, ZUO, YOU, KUO_L, KUO_R;<br \/>\n    static bool kw_ready &#061; false;<br \/>\n    if (!kw_ready) {<br \/>\n        BI &#061; to_ansi(&#034;\u6bd4&#034;); XIAO &#061; to_ansi(&#034;\u5c0f&#034;); DA &#061; to_ansi(&#034;\u5927&#034;);<br \/>\n        ZUO &#061; to_ansi(&#034;&#xff08;&#034;); YOU &#061; to_ansi(&#034;&#xff09;&#034;);<br \/>\n        KUO_L &#061; to_ansi(&#034;\u300a&#034;); KUO_R &#061; to_ansi(&#034;\u300b&#034;);<br \/>\n        kw_ready &#061; true;<br \/>\n    }<br \/>\n    const size_t BI_LEN &#061; BI.size(), XIAO_LEN &#061; XIAO.size(), DA_LEN &#061; DA.size();<br \/>\n    const size_t ZUO_LEN &#061; ZUO.size(), YOU_LEN &#061; YOU.size();<br \/>\n    const size_t KUO_L_LEN &#061; KUO_L.size(), KUO_R_LEN &#061; KUO_R.size();<\/p>\n<p>    static string REPEAT_KW, TIMES_KW, FOR_KW, CONG_KW, DAO_KW, DEC_KW, GUA_KW, HUAN_KW;<br \/>\n    static bool new_kw_ready &#061; false;<br \/>\n    if (!new_kw_ready) {<br \/>\n        REPEAT_KW &#061; to_ansi(&#034;\u91cd\u590d&#034;);<br \/>\n        TIMES_KW  &#061; to_ansi(&#034;\u6b21&#034;);<br \/>\n        FOR_KW    &#061; to_ansi(&#034;\u5bf9\u4e8e&#034;);<br \/>\n        CONG_KW   &#061; to_ansi(&#034;\u4ece&#034;);<br \/>\n        DAO_KW    &#061; to_ansi(&#034;\u5230&#034;);<br \/>\n        DEC_KW    &#061; to_ansi(&#034;\u9012\u51cf&#034;);<br \/>\n        GUA_KW    &#061; to_ansi(&#034;\u5366&#034;);<br \/>\n        HUAN_KW   &#061; to_ansi(&#034;\u73af&#034;);<br \/>\n        new_kw_ready &#061; true;<br \/>\n    }<br \/>\n    const size_t REPEAT_LEN &#061; REPEAT_KW.size(), TIMES_LEN &#061; TIMES_KW.size();<br \/>\n    const size_t FOR_KW_LEN &#061; FOR_KW.size(), CONG_LEN &#061; CONG_KW.size();<br \/>\n    const size_t DAO_LEN &#061; DAO_KW.size(), DEC_LEN &#061; DEC_KW.size();<br \/>\n    const size_t GUA_LEN &#061; GUA_KW.size(), HUAN_LEN &#061; HUAN_KW.size();<\/p>\n<p>    static string ZE_SPACE_KW, ZE_KW;<br \/>\n    static bool ze_ready &#061; false;<br \/>\n    if (!ze_ready) {<br \/>\n        ZE_SPACE_KW &#061; to_ansi(&#034;\u5219 &#034;);<br \/>\n        ZE_KW       &#061; to_ansi(&#034;\u5219&#034;);<br \/>\n        ze_ready &#061; true;<br \/>\n    }<\/p>\n<p>    vector&lt;int&gt; repeat_stack;<br \/>\n    int next_rep_id &#061; 0;   \/\/ v3.6.3&#xff1a;\u72ec\u7acb\u9012\u589e\u8ba1\u6570\u5668&#xff0c;\u907f\u514d\u5d4c\u5957\u540c\u540d<\/p>\n<p>    string out;<br \/>\n    size_t i &#061; 0;<br \/>\n    const size_t N &#061; src.size();<br \/>\n    while (i &lt; N) {<br \/>\n        if (src[i] &#061;&#061; &#039;&#034;&#039;) {<br \/>\n            out &#043;&#061; src[i&#043;&#043;];<br \/>\n            while (i &lt; N) {<br \/>\n                if (src[i] &#061;&#061; &#039;\\\\\\\\&#039; &amp;&amp; i&#043;1 &lt; N) { out &#043;&#061; src[i&#043;&#043;]; out &#043;&#061; src[i&#043;&#043;]; continue; }<br \/>\n                if (src[i] &#061;&#061; &#039;&#034;&#039;) break;<br \/>\n                out &#043;&#061; src[i&#043;&#043;];<br \/>\n            }<br \/>\n            if (i &lt; N) out &#043;&#061; src[i&#043;&#043;];<br \/>\n            continue;<br \/>\n        }<br \/>\n        if (src[i] &#061;&#061; &#039;\\\\\\\\&#039; &amp;&amp; i &#043; 1 &lt; N) {<br \/>\n            size_t clen &#061; advance_one_char(src, i &#043; 1);<br \/>\n            if (i &#043; 1 &#043; clen &lt;&#061; N) { out &#043;&#061; src.substr(i &#043; 1, clen); i &#043;&#061; 1 &#043; clen; continue; }<br \/>\n        }<br \/>\n        if (src[i] &#061;&#061; &#039;\/&#039; &amp;&amp; i&#043;1 &lt; N &amp;&amp; src[i&#043;1] &#061;&#061; &#039;\/&#039;) {<br \/>\n            while (i &lt; N &amp;&amp; src[i] !&#061; &#039;\\\\n&#039;) out &#043;&#061; src[i&#043;&#043;];<br \/>\n            continue;<br \/>\n        }<br \/>\n        if (src[i] &#061;&#061; &#039;\/&#039; &amp;&amp; i&#043;1 &lt; N &amp;&amp; src[i&#043;1] &#061;&#061; &#039;*&#039;) {<br \/>\n            out &#043;&#061; src[i&#043;&#043;]; out &#043;&#061; src[i&#043;&#043;];<br \/>\n            while (i &lt; N &amp;&amp; !(src[i-1] &#061;&#061; &#039;*&#039; &amp;&amp; src[i] &#061;&#061; &#039;\/&#039;)) out &#043;&#061; src[i&#043;&#043;];<br \/>\n            if (i &lt; N) out &#043;&#061; src[i&#043;&#043;];<br \/>\n            continue;<br \/>\n        }<\/p>\n<p>        bool matched &#061; false;<\/p>\n<p>        \/\/ &#8212;- \u91cd\u590d N \u6b21 &#8212;-<br \/>\n        if (!matched &amp;&amp; REPEAT_LEN &gt; 0 &amp;&amp; i &#043; REPEAT_LEN &lt;&#061; N &amp;&amp;<br \/>\n            src.compare(i, REPEAT_LEN, REPEAT_KW) &#061;&#061; 0) {<br \/>\n            if (i &#061;&#061; 0 || !is_ascii_ident((unsigned char)src[i-1])) {<br \/>\n                int id &#061; next_rep_id&#043;&#043;;   \/\/ v3.6.3&#xff1a;\u72ec\u7acb\u9012\u589e<br \/>\n                repeat_stack.push_back(id);<br \/>\n                out &#043;&#061; &#034;for (int _i_rep_&#034; &#043; to_string(id) &#043; &#034; &#061; 0; _i_rep_&#034;<br \/>\n                       &#043; to_string(id) &#043; &#034; &lt; (&#034;;<br \/>\n                i &#043;&#061; REPEAT_LEN;<br \/>\n                matched &#061; true;<br \/>\n            }<br \/>\n        }<br \/>\n        \/\/ &#8212;- \u6b21 &#8212;-<br \/>\n        if (!matched &amp;&amp; !repeat_stack.empty() &amp;&amp; TIMES_LEN &gt; 0 &amp;&amp;<br \/>\n            i &#043; TIMES_LEN &lt;&#061; N &amp;&amp; src.compare(i, TIMES_LEN, TIMES_KW) &#061;&#061; 0) {<br \/>\n            if (i &#061;&#061; 0 || !is_ascii_ident((unsigned char)src[i-1])) {<br \/>\n                size_t aft &#061; i &#043; TIMES_LEN;<br \/>\n                unsigned char nx &#061; (aft &lt; N) ? (unsigned char)src[aft] : (unsigned char)0;<br \/>\n                if (nx &#061;&#061; 0 || isspace(nx) ||<br \/>\n                    (aft &#043; KUO_L_LEN &lt;&#061; N &amp;&amp;<br \/>\n                     src.compare(aft, KUO_L_LEN, KUO_L) &#061;&#061; 0)) {<br \/>\n                    int id &#061; repeat_stack.back();<br \/>\n                    repeat_stack.pop_back();<br \/>\n                    out &#043;&#061; &#034;); _i_rep_&#034; &#043; to_string(id) &#043; &#034;&#043;&#043;) &#034;;<br \/>\n                    i &#061; aft;<br \/>\n                    matched &#061; true;<br \/>\n                }<br \/>\n            }<br \/>\n        }<br \/>\n        \/\/ &#8212;- \u5bf9\u4e8e X \u4ece A \u5230 B [\u9012\u51cf] &#8212;-<br \/>\n        if (!matched &amp;&amp; FOR_KW_LEN &gt; 0 &amp;&amp; i &#043; FOR_KW_LEN &lt;&#061; N &amp;&amp;<br \/>\n            src.compare(i, FOR_KW_LEN, FOR_KW) &#061;&#061; 0) {<br \/>\n            if (i &#061;&#061; 0 || !is_ascii_ident((unsigned char)src[i-1])) {<br \/>\n                size_t j &#061; i &#043; FOR_KW_LEN;<br \/>\n                while (j &lt; N &amp;&amp; isspace((unsigned char)src[j])) j&#043;&#043;;<br \/>\n                size_t vs &#061; j;<br \/>\n                while (j &lt; N &amp;&amp; !isspace((unsigned char)src[j]) &amp;&amp;<br \/>\n                       !(j &#043; CONG_LEN &lt;&#061; N &amp;&amp;<br \/>\n                         src.compare(j, CONG_LEN, CONG_KW) &#061;&#061; 0))<br \/>\n                    j &#043;&#061; advance_one_char(src, j);<br \/>\n                size_t ve &#061; j;<br \/>\n                while (j &lt; N &amp;&amp; isspace((unsigned char)src[j])) j&#043;&#043;;<br \/>\n                if (ve &gt; vs &amp;&amp; j &#043; CONG_LEN &lt;&#061; N &amp;&amp;<br \/>\n                    src.compare(j, CONG_LEN, CONG_KW) &#061;&#061; 0) {<br \/>\n                    string var &#061; src.substr(vs, ve &#8211; vs);<br \/>\n                    j &#043;&#061; CONG_LEN;<br \/>\n                    while (j &lt; N &amp;&amp; isspace((unsigned char)src[j])) j&#043;&#043;;<br \/>\n                    size_t as &#061; j;<br \/>\n                    while (j &lt; N &amp;&amp; !isspace((unsigned char)src[j]) &amp;&amp;<br \/>\n                           !(j &#043; DAO_LEN &lt;&#061; N &amp;&amp;<br \/>\n                             src.compare(j, DAO_LEN, DAO_KW) &#061;&#061; 0))<br \/>\n                        j &#043;&#061; advance_one_char(src, j);<br \/>\n                    size_t ae &#061; j;<br \/>\n                    while (j &lt; N &amp;&amp; isspace((unsigned char)src[j])) j&#043;&#043;;<br \/>\n                    if (ae &gt; as &amp;&amp; j &#043; DAO_LEN &lt;&#061; N &amp;&amp;<br \/>\n                        src.compare(j, DAO_LEN, DAO_KW) &#061;&#061; 0) {<br \/>\n                        string A &#061; src.substr(as, ae &#8211; as);<br \/>\n                        j &#043;&#061; DAO_LEN;<br \/>\n                        while (j &lt; N &amp;&amp; isspace((unsigned char)src[j])) j&#043;&#043;;<br \/>\n                        size_t bs &#061; j;<br \/>\n                        while (j &lt; N &amp;&amp; !isspace((unsigned char)src[j]) &amp;&amp;<br \/>\n                               !(j &#043; DEC_LEN &lt;&#061; N &amp;&amp;<br \/>\n                                 src.compare(j, DEC_LEN, DEC_KW) &#061;&#061; 0) &amp;&amp;<br \/>\n                               !(j &#043; KUO_L_LEN &lt;&#061; N &amp;&amp;<br \/>\n                                 src.compare(j, KUO_L_LEN, KUO_L) &#061;&#061; 0)) {<br \/>\n                            if (is_cjk_terminator_at(src, j)) break;<br \/>\n                            j &#043;&#061; advance_one_char(src, j);<br \/>\n                        }<br \/>\n                        size_t be &#061; j;<br \/>\n                        if (be &gt; bs) {<br \/>\n                            string B &#061; src.substr(bs, be &#8211; bs);<br \/>\n                            while (j &lt; N &amp;&amp; isspace((unsigned char)src[j])) j&#043;&#043;;<br \/>\n                            bool desc &#061; false;<br \/>\n                            if (j &#043; DEC_LEN &lt;&#061; N &amp;&amp;<br \/>\n                                src.compare(j, DEC_LEN, DEC_KW) &#061;&#061; 0) {<br \/>\n                                desc &#061; true; j &#043;&#061; DEC_LEN;<br \/>\n                            }<br \/>\n                            out &#043;&#061; &#034;for (int &#034; &#043; var &#043; &#034; &#061; &#034; &#043; A &#043; &#034;; &#034; &#043; var;<br \/>\n                            out &#043;&#061; desc ? &#034; &gt;&#061; &#034; : &#034; &lt;&#061; &#034;;<br \/>\n                            out &#043;&#061; B &#043; &#034;; &#034; &#043; var;<br \/>\n                            out &#043;&#061; desc ? &#034;&#8211;&#034; : &#034;&#043;&#043;&#034;;<br \/>\n                            out &#043;&#061; &#034;) &#034;;<br \/>\n                            i &#061; j;<br \/>\n                            matched &#061; true;<br \/>\n                        }<br \/>\n                    }<br \/>\n                }<br \/>\n            }<br \/>\n        }<br \/>\n        \/\/ &#8212;- \u73af \u300a &#8212;-<br \/>\n        if (!matched &amp;&amp; HUAN_LEN &gt; 0 &amp;&amp; i &#043; HUAN_LEN &lt;&#061; N &amp;&amp;<br \/>\n            src.compare(i, HUAN_LEN, HUAN_KW) &#061;&#061; 0) {<br \/>\n            if (i &#061;&#061; 0 || !is_ascii_ident((unsigned char)src[i-1])) {<br \/>\n                size_t j &#061; i &#043; HUAN_LEN;<br \/>\n                while (j &lt; N &amp;&amp; isspace((unsigned char)src[j])) j&#043;&#043;;<br \/>\n                if (j &#043; KUO_L_LEN &lt;&#061; N &amp;&amp;<br \/>\n                    src.compare(j, KUO_L_LEN, KUO_L) &#061;&#061; 0) {<br \/>\n                    out &#043;&#061; &#034;while (true) {&#034;;<br \/>\n                    i &#061; j &#043; KUO_L_LEN;<br \/>\n                    matched &#061; true;<br \/>\n                }<br \/>\n            }<br \/>\n        }<br \/>\n        \/\/ &#8212;- \u5366 N \/ \u5366 A \u5230 B &#8212;-<br \/>\n        if (!matched &amp;&amp; GUA_LEN &gt; 0 &amp;&amp; i &#043; GUA_LEN &lt;&#061; N &amp;&amp;<br \/>\n            src.compare(i, GUA_LEN, GUA_KW) &#061;&#061; 0) {<br \/>\n            if (i &#061;&#061; 0 || !is_ascii_ident((unsigned char)src[i-1])) {<br \/>\n                size_t j &#061; i &#043; GUA_LEN;<br \/>\n                while (j &lt; N &amp;&amp; isspace((unsigned char)src[j])) j&#043;&#043;;<br \/>\n                size_t as &#061; j;<br \/>\n                while (j &lt; N &amp;&amp; !isspace((unsigned char)src[j]) &amp;&amp;<br \/>\n                       src[j] !&#061; &#039;;&#039; &amp;&amp; src[j] !&#061; &#039;)&#039; &amp;&amp;<br \/>\n                       src[j] !&#061; &#039;,&#039; &amp;&amp; src[j] !&#061; &#039;(&#039; &amp;&amp;<br \/>\n                       src[j] !&#061; &#039;{&#039; &amp;&amp; src[j] !&#061; &#039;}&#039;) {<br \/>\n                    if (j &#043; DAO_LEN &lt;&#061; N &amp;&amp;<br \/>\n                        src.compare(j, DAO_LEN, DAO_KW) &#061;&#061; 0) break;<br \/>\n                    if (is_cjk_terminator_at(src, j)) break;<br \/>\n                    j &#043;&#061; advance_one_char(src, j);<br \/>\n                }<br \/>\n                size_t ae &#061; j;<br \/>\n                if (ae &gt; as) {<br \/>\n                    while (j &lt; N &amp;&amp; isspace((unsigned char)src[j])) j&#043;&#043;;<br \/>\n                    if (j &#043; DAO_LEN &lt;&#061; N &amp;&amp;<br \/>\n                        src.compare(j, DAO_LEN, DAO_KW) &#061;&#061; 0) {<br \/>\n                        j &#043;&#061; DAO_LEN;<br \/>\n                        while (j &lt; N &amp;&amp; isspace((unsigned char)src[j])) j&#043;&#043;;<br \/>\n                        size_t bs &#061; j;<br \/>\n                        while (j &lt; N &amp;&amp; !isspace((unsigned char)src[j]) &amp;&amp;<br \/>\n                               src[j] !&#061; &#039;;&#039; &amp;&amp; src[j] !&#061; &#039;)&#039; &amp;&amp;<br \/>\n                               src[j] !&#061; &#039;,&#039; &amp;&amp; src[j] !&#061; &#039;(&#039; &amp;&amp;<br \/>\n                               src[j] !&#061; &#039;{&#039; &amp;&amp; src[j] !&#061; &#039;}&#039;) {<br \/>\n                            if (is_cjk_terminator_at(src, j)) break;<br \/>\n                            j &#043;&#061; advance_one_char(src, j);<br \/>\n                        }<br \/>\n                        size_t be &#061; j;<br \/>\n                        if (be &gt; bs) {<br \/>\n                            string A &#061; src.substr(as, ae &#8211; as);<br \/>\n                            string B &#061; src.substr(bs, be &#8211; bs);<br \/>\n                            out &#043;&#061; &#034;((rand() % ((&#034; &#043; B &#043; &#034;) &#8211; (&#034; &#043; A<br \/>\n                                 &#043; &#034;) &#043; 1)) &#043; (&#034; &#043; A &#043; &#034;))&#034;;<br \/>\n                            i &#061; j;<br \/>\n                            matched &#061; true;<br \/>\n                        }<br \/>\n                    } else {<br \/>\n                        string N_ &#061; src.substr(as, ae &#8211; as);<br \/>\n                        out &#043;&#061; &#034;(rand() % (&#034; &#043; N_ &#043; &#034;))&#034;;<br \/>\n                        i &#061; ae;<br \/>\n                        matched &#061; true;<br \/>\n                    }<br \/>\n                }<br \/>\n            }<br \/>\n        }<\/p>\n<p>        \/\/ &#8212;- &#034;\u6bd4&#034; \u7ed3\u6784 &#8212;-<br \/>\n        if (!matched &amp;&amp; BI_LEN &gt; 0 &amp;&amp; i &#043; BI_LEN &lt;&#061; N &amp;&amp; src.compare(i, BI_LEN, BI) &#061;&#061; 0) {<br \/>\n            bool boundary_ok &#061; (i &#061;&#061; 0) || !is_ascii_ident((unsigned char)src[i-1]);<br \/>\n            if (!boundary_ok) {<br \/>\n                size_t probe &#061; i &#043; BI_LEN;<br \/>\n                if (probe &lt; N) {<br \/>\n                    unsigned char p &#061; (unsigned char)src[probe];<br \/>\n                    bool sp &#061; isspace(p) !&#061; 0;<br \/>\n                    bool xa &#061; (probe &#043; XIAO_LEN &lt;&#061; N &amp;&amp; src.compare(probe, XIAO_LEN, XIAO) &#061;&#061; 0);<br \/>\n                    bool da &#061; (probe &#043; DA_LEN   &lt;&#061; N &amp;&amp; src.compare(probe, DA_LEN,   DA)   &#061;&#061; 0);<br \/>\n                    boundary_ok &#061; !sp &amp;&amp; !xa &amp;&amp; !da;<br \/>\n                }<br \/>\n            }<br \/>\n            if (boundary_ok) {<br \/>\n                size_t v1_end &#061; i;<br \/>\n                while (v1_end &gt; 0 &amp;&amp; isspace((unsigned char)src[v1_end-1])) v1_end&#8211;;<br \/>\n                size_t v1_start &#061; v1_end;<br \/>\n                while (v1_start &gt; 0 &amp;&amp;<br \/>\n                       !isspace((unsigned char)src[v1_start-1]) &amp;&amp;<br \/>\n                       src[v1_start-1] !&#061; &#039;(&#039; &amp;&amp;<br \/>\n                       !(v1_start &gt;&#061; ZUO_LEN &amp;&amp; src.compare(v1_start &#8211; ZUO_LEN, ZUO_LEN, ZUO) &#061;&#061; 0))<br \/>\n                    v1_start&#8211;;<br \/>\n                size_t j &#061; i &#043; BI_LEN;<br \/>\n                while (j &lt; N &amp;&amp; isspace((unsigned char)src[j])) j&#043;&#043;;<br \/>\n                size_t v2_start &#061; j, v2_end &#061; j;<br \/>\n                int depth &#061; 0;<br \/>\n                const size_t MAX_SCAN &#061; 4096;<br \/>\n                while (v2_end &lt; N &amp;&amp; (v2_end &#8211; v2_start) &lt; MAX_SCAN) {<br \/>\n                    unsigned char c &#061; (unsigned char)src[v2_end];<br \/>\n                    if (c &#061;&#061; &#039;(&#039;) { depth&#043;&#043;; v2_end&#043;&#043;; continue; }<br \/>\n                    if (c &#061;&#061; &#039;)&#039;) { if (depth &#061;&#061; 0) break; depth&#8211;; v2_end&#043;&#043;; continue; }<br \/>\n                    if (v2_end &#043; ZUO_LEN &lt;&#061; N &amp;&amp; src.compare(v2_end, ZUO_LEN, ZUO) &#061;&#061; 0) { depth&#043;&#043;; v2_end &#043;&#061; ZUO_LEN; continue; }<br \/>\n                    if (v2_end &#043; YOU_LEN &lt;&#061; N &amp;&amp; src.compare(v2_end, YOU_LEN, YOU) &#061;&#061; 0) { if (depth &#061;&#061; 0) break; depth&#8211;; v2_end &#043;&#061; YOU_LEN; continue; }<br \/>\n                    if (depth &#061;&#061; 0) {<br \/>\n                        if (isspace(c) || c &#061;&#061; &#039;;&#039; || c &#061;&#061; &#039;{&#039; || c &#061;&#061; &#039;}&#039;) break;<br \/>\n                        if (v2_end &#043; KUO_L_LEN &lt;&#061; N &amp;&amp; src.compare(v2_end, KUO_L_LEN, KUO_L) &#061;&#061; 0) break;<br \/>\n                        if (v2_end &#043; KUO_R_LEN &lt;&#061; N &amp;&amp; src.compare(v2_end, KUO_R_LEN, KUO_R) &#061;&#061; 0) break;<br \/>\n                        if (v2_end &#043; XIAO_LEN &lt;&#061; N &amp;&amp; src.compare(v2_end, XIAO_LEN, XIAO) &#061;&#061; 0) break;<br \/>\n                        if (v2_end &#043; DA_LEN   &lt;&#061; N &amp;&amp; src.compare(v2_end, DA_LEN,   DA)   &#061;&#061; 0) break;<br \/>\n                    }<br \/>\n                    v2_end &#043;&#061; advance_one_char(src, v2_end);<br \/>\n                }<br \/>\n                size_t after &#061; v2_end;<br \/>\n                while (after &lt; N &amp;&amp; isspace((unsigned char)src[after])) after&#043;&#043;;<br \/>\n                bool is_xiao &#061; (after &#043; XIAO_LEN &lt;&#061; N &amp;&amp; src.compare(after, XIAO_LEN, XIAO) &#061;&#061; 0);<br \/>\n                bool is_da   &#061; (after &#043; DA_LEN   &lt;&#061; N &amp;&amp; src.compare(after, DA_LEN,   DA)   &#061;&#061; 0);<br \/>\n                if (v1_end &gt; v1_start &amp;&amp; v2_end &gt; v2_start &amp;&amp; (is_xiao || is_da)) {<br \/>\n                    char op &#061; is_xiao ? &#039;&lt;&#039; : &#039;&gt;&#039;;<br \/>\n                    string var2 &#061; src.substr(v2_start, v2_end &#8211; v2_start);<br \/>\n                    var2 &#061; translate_punct_only(var2);<br \/>\n                    while (!out.empty() &amp;&amp; isspace((unsigned char)out.back())) out.pop_back();<br \/>\n                    out &#043;&#061; &#034; &#034;; out &#043;&#061; op; out &#043;&#061; &#034; &#034;; out &#043;&#061; var2;<br \/>\n                    i &#061; after &#043; (is_xiao ? XIAO_LEN : DA_LEN);<br \/>\n                    matched &#061; true;<br \/>\n                }<br \/>\n            }<br \/>\n        }<\/p>\n<p>        \/\/ &#8212;- \u5e38\u89c4 pattern &#8212;-<br \/>\n        if (!matched) {<br \/>\n            for (size_t k &#061; 0; k &lt; patterns.size(); &#043;&#043;k) {<br \/>\n                const string&amp; from &#061; patterns[k].first;<br \/>\n                const string&amp; to   &#061; patterns[k].second;<br \/>\n                if (from.empty() || i &#043; from.size() &gt; N) continue;<br \/>\n                if (src.compare(i, from.size(), from) !&#061; 0) continue;<\/p>\n<p>                \/\/ \u5219 \/ \u5219\u2423 \u524d\u8fb9\u754c\u4fdd\u62a4<br \/>\n                if ((from &#061;&#061; ZE_SPACE_KW || from &#061;&#061; ZE_KW) &amp;&amp;<br \/>\n                    i &gt; 0 &amp;&amp; (unsigned char)src[i-1] &gt;&#061; 0x80)<br \/>\n                    continue;<\/p>\n<p>                if (!is_punct_pattern(from) &amp;&amp;<br \/>\n                    i &gt; 0 &amp;&amp; is_ascii_ident((unsigned char)src[i-1])) continue;<br \/>\n                if (ends_with_cjk_hanzi(from) &amp;&amp; !ends_with_any_punct(from)) {<br \/>\n                    size_t end &#061; i &#043; from.size();<br \/>\n                    if (end &lt; N) {<br \/>\n                        unsigned char next &#061; (unsigned char)src[end];<br \/>\n                        if (is_ascii_ident(next)) continue;<br \/>\n                        if (next &gt;&#061; 0x80 &amp;&amp; !is_fullwidth_punct_at(src, end)) continue;<br \/>\n                    }<br \/>\n                }<br \/>\n                out &#043;&#061; to;<br \/>\n                i &#043;&#061; from.size();<br \/>\n                matched &#061; true;<br \/>\n                break;<br \/>\n            }<br \/>\n        }<\/p>\n<p>        if (!matched) out &#043;&#061; src[i&#043;&#043;];<br \/>\n    }<br \/>\n    return out;<br \/>\n}<\/p>\n<p>\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\/\/ \u540e\u53f0\u4efb\u52a1<br \/>\n\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\nstruct CompileJob { string src; bool runAfter; };<\/p>\n<p>static void FinishByStop() {<br \/>\n    g_stopRequested.store(false);<br \/>\n    if (g_hMainWnd) PostMessage(g_hMainWnd, WM_COMPILE_FINISHED, 0, 0);<br \/>\n}<\/p>\n<p>static bool RunAndCapture(const string&amp; cmdline,<br \/>\n                          std::atomic&lt;HANDLE&gt;* pSlot,<br \/>\n                          string&amp; output) {<br \/>\n    SECURITY_ATTRIBUTES sa &#061; {};<br \/>\n    sa.nLength &#061; sizeof(sa);<br \/>\n    sa.bInheritHandle &#061; TRUE;<\/p>\n<p>    HANDLE hRead &#061; NULL, hWrite &#061; NULL;<br \/>\n    if (!CreatePipe(&amp;hRead, &amp;hWrite, &amp;sa, 0)) return false;<br \/>\n    SetHandleInformation(hRead, HANDLE_FLAG_INHERIT, 0);<\/p>\n<p>    HANDLE hNul &#061; CreateFileA(&#034;NUL&#034;, GENERIC_READ,<br \/>\n                              FILE_SHARE_READ | FILE_SHARE_WRITE,<br \/>\n                              NULL, OPEN_EXISTING, 0, NULL);<br \/>\n    if (hNul &#061;&#061; INVALID_HANDLE_VALUE) hNul &#061; NULL;<\/p>\n<p>    STARTUPINFOA si &#061; { sizeof(si) };<br \/>\n    si.dwFlags &#061; STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;<br \/>\n    si.wShowWindow &#061; SW_HIDE;<br \/>\n    si.hStdOutput &#061; hWrite;<br \/>\n    si.hStdError  &#061; hWrite;<br \/>\n    si.hStdInput  &#061; hNul;<\/p>\n<p>    PROCESS_INFORMATION pi &#061; {};<br \/>\n    vector&lt;char&gt; cmdbuf(cmdline.begin(), cmdline.end());<br \/>\n    cmdbuf.push_back(&#039;\\\\0&#039;);<\/p>\n<p>    BOOL ok &#061; CreateProcessA(NULL, &amp;cmdbuf[0], NULL, NULL, TRUE,<br \/>\n                             CREATE_NO_WINDOW, NULL, NULL, &amp;si, &amp;pi);<br \/>\n    CloseHandle(hWrite);<br \/>\n    if (hNul) CloseHandle(hNul);<br \/>\n    if (!ok) { CloseHandle(hRead); return false; }<\/p>\n<p>    if (pSlot) pSlot-&gt;store(pi.hProcess);<br \/>\n    CloseHandle(pi.hThread);<\/p>\n<p>    char buf[1024];<br \/>\n    DWORD rd &#061; 0;<br \/>\n    while (ReadFile(hRead, buf, sizeof(buf) &#8211; 1, &amp;rd, NULL) &amp;&amp; rd &gt; 0)<br \/>\n        output.append(buf, rd);<br \/>\n    CloseHandle(hRead);<\/p>\n<p>    WaitForSingleObject(pi.hProcess, INFINITE);<br \/>\n    DWORD ec &#061; 1;<br \/>\n    GetExitCodeProcess(pi.hProcess, &amp;ec);<\/p>\n<p>    if (pSlot) pSlot-&gt;store(NULL);<br \/>\n    CloseHandle(pi.hProcess);<br \/>\n    return (ec &#061;&#061; 0);<br \/>\n}<\/p>\n<p>void CompileAndRunTask(const string&amp; src, bool runAfter) {<br \/>\n    if (g_stopRequested.load()) { FinishByStop(); return; }<\/p>\n<p>    string cppPath &#061; g_tempDir &#043; &#034;\\\\\\\\output.cpp&#034;;<br \/>\n    string exePath &#061; g_tempDir &#043; &#034;\\\\\\\\output.exe&#034;;<\/p>\n<p>    string cpp &#061; translate_xuan(src);<\/p>\n<p>    {<br \/>\n        static const string GUA_NEEDLE &#061; to_ansi(&#034;\u5366&#034;);<br \/>\n        if (cpp.find(GUA_NEEDLE) !&#061; string::npos ||<br \/>\n            src.find(GUA_NEEDLE) !&#061; string::npos) {<br \/>\n            string inject &#061;<br \/>\n                &#034;\/\/ \u7384 v3.6.3&#xff1a;\u68c0\u6d4b\u5230 \u5366&#xff0c;\u81ea\u52a8\u6ce8\u5165\u968f\u673a\u79cd\u5b50\\\\n&#034;<br \/>\n                &#034;#include &lt;cstdlib&gt;\\\\n&#034;<br \/>\n                &#034;#include &lt;ctime&gt;\\\\n&#034;<br \/>\n                &#034;namespace { struct _xuan_srand_init {&#034;<br \/>\n                &#034; _xuan_srand_init(){ srand((unsigned)time(0)); }&#034;<br \/>\n                &#034; } _xuan_srand_instance; }\\\\n&#034;;<br \/>\n            cpp &#061; inject &#043; cpp;<br \/>\n        }<br \/>\n    }<\/p>\n<p>    write_file(cppPath, cpp);<\/p>\n<p>    string buildLog;<br \/>\n    string gppCmd &#061; &#034;g&#043;&#043; \\\\&#034;&#034; &#043; cppPath &#043; &#034;\\\\&#034; -o \\\\&#034;&#034; &#043; exePath &#043; &#034;\\\\&#034; &#034;<br \/>\n                    &#034;-std&#061;c&#043;&#043;11 -finput-charset&#061;GBK -fexec-charset&#061;GBK&#034;;<br \/>\n    bool compileOK &#061; RunAndCapture(gppCmd, &amp;g_hGppProcess, buildLog);<\/p>\n<p>    if (g_stopRequested.load()) { FinishByStop(); return; }<\/p>\n<p>    if (!compileOK) {<br \/>\n        string* pMsg &#061; new string(<br \/>\n            to_ansi(&#034;\u274c \u7f16\u8bd1\u5931\u8d25:\\\\n&#034;) &#043; buildLog<br \/>\n            &#043; to_ansi(&#034;\\\\n\u63d0\u793a&#xff1a;\u8f6c\u8bd1\u540e\u7684 C&#043;&#043; \u6e90\u7801\u5728 &#034;) &#043; cppPath &#043; &#034;\\\\n&#034;);<br \/>\n        if (g_hMainWnd) PostMessage(g_hMainWnd, WM_UPDATE_OUTPUT, 0, (LPARAM)pMsg);<br \/>\n        else delete pMsg;<br \/>\n        if (g_hMainWnd) PostMessage(g_hMainWnd, WM_COMPILE_FINISHED, 0, 0);<br \/>\n        return;<br \/>\n    }<\/p>\n<p>    string* pMsg &#061; new string(to_ansi(&#034;\u2705 \u7f16\u8bd1\u6210\u529f!\\\\n&#034;) &#043; buildLog);<br \/>\n    if (g_hMainWnd) PostMessage(g_hMainWnd, WM_UPDATE_OUTPUT, 0, (LPARAM)pMsg);<br \/>\n    else delete pMsg;<\/p>\n<p>    if (runAfter) {<br \/>\n        if (g_stopRequested.load()) { FinishByStop(); return; }<\/p>\n<p>        string outputLog;<br \/>\n        string runCmd &#061; &#034;\\\\&#034;&#034; &#043; exePath &#043; &#034;\\\\&#034;&#034;;<br \/>\n        RunAndCapture(runCmd, &amp;g_hOutputProcess, outputLog);<\/p>\n<p>        if (g_stopRequested.load()) { FinishByStop(); return; }<\/p>\n<p>        if (looks_like_utf8(outputLog)) outputLog &#061; utf8_to_ansi(outputLog);<\/p>\n<p>        string* pRun &#061; new string(to_ansi(&#034;\\\\n\u25b6 \u7a0b\u5e8f\u8f93\u51fa:\\\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;\\\\n&#034;)<br \/>\n                                  &#043; outputLog<br \/>\n                                  &#043; to_ansi(&#034;\\\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;\\\\n&#034;));<br \/>\n        if (g_hMainWnd) PostMessage(g_hMainWnd, WM_UPDATE_OUTPUT, 1, (LPARAM)pRun);<br \/>\n        else delete pRun;<br \/>\n    }<\/p>\n<p>    if (g_hMainWnd) PostMessage(g_hMainWnd, WM_COMPILE_FINISHED, 0, 0);<br \/>\n}<\/p>\n<p>unsigned __stdcall CompileThreadProc(void* lpParam) {<br \/>\n    CompileJob* pJob &#061; (CompileJob*)lpParam;<br \/>\n    if (!pJob) return 0;<br \/>\n    CompileAndRunTask(pJob-&gt;src, pJob-&gt;runAfter);<br \/>\n    delete pJob;<br \/>\n    return 0;<br \/>\n}<\/p>\n<p>\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\/\/ \u505c\u6b62<br \/>\n\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\nvoid KillOutputExe() {<br \/>\n    HANDLE hGpp &#061; g_hGppProcess.load();<br \/>\n    if (hGpp) TerminateProcess(hGpp, 1);<\/p>\n<p>    HANDLE hOut &#061; g_hOutputProcess.load();<br \/>\n    if (hOut) TerminateProcess(hOut, 1);<br \/>\n}<\/p>\n<p>\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\/\/ \u5e2e\u52a9\u7a97\u53e3<br \/>\n\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\nstatic const string&amp; GetHelpAnsi() {<br \/>\n    static const string s &#061; to_ansi(HELP_TEXT);<br \/>\n    return s;<br \/>\n}<\/p>\n<p>LRESULT CALLBACK HelpWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {<br \/>\n    switch (msg) {<br \/>\n        case WM_CREATE: {<br \/>\n            g_hHelpEdit &#061; CreateWindowExA(WS_EX_CLIENTEDGE, &#034;EDIT&#034;,<br \/>\n                GetHelpAnsi().c_str(),<br \/>\n                WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_READONLY |<br \/>\n                ES_AUTOVSCROLL | WS_VSCROLL | ES_AUTOHSCROLL | WS_HSCROLL,<br \/>\n                10, 10, 100, 100, hWnd, NULL, g_hInst, NULL);<br \/>\n            g_hHelpFont &#061; CreateFont(16, 0, 0, 0, FW_NORMAL, 0, 0, 0,<br \/>\n                DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,<br \/>\n                DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN, XA(&#034;\u65b0\u5b8b\u4f53&#034;));<br \/>\n            SendMessage(g_hHelpEdit, WM_SETFONT, (WPARAM)g_hHelpFont, TRUE);<br \/>\n            return 0;<br \/>\n        }<br \/>\n        case WM_SIZE: {<br \/>\n            if (g_hHelpEdit)<br \/>\n                SetWindowPos(g_hHelpEdit, NULL, 10, 10,<br \/>\n                    LOWORD(lParam) &#8211; 20, HIWORD(lParam) &#8211; 20, SWP_NOZORDER);<br \/>\n            return 0;<br \/>\n        }<br \/>\n        case WM_CLOSE: DestroyWindow(hWnd); return 0;<br \/>\n        case WM_DESTROY:<br \/>\n            if (g_hHelpFont) { DeleteObject(g_hHelpFont); g_hHelpFont &#061; NULL; }<br \/>\n            g_hHelpWnd &#061; NULL; g_hHelpEdit &#061; NULL;<br \/>\n            return 0;<br \/>\n        default:<br \/>\n            return DefWindowProc(hWnd, msg, wParam, lParam);<br \/>\n    }<br \/>\n}<\/p>\n<p>void ShowHelp() {<br \/>\n    if (g_hHelpWnd &amp;&amp; IsWindow(g_hHelpWnd)) {<br \/>\n        SetForegroundWindow(g_hHelpWnd);<br \/>\n        return;<br \/>\n    }<br \/>\n    WNDCLASSA wcCheck &#061; {};<br \/>\n    if (!GetClassInfoA(g_hInst, &#034;XuanHelpWnd&#034;, &amp;wcCheck)) {<br \/>\n        WNDCLASSA wc &#061; {};<br \/>\n        wc.lpfnWndProc &#061; HelpWndProc;<br \/>\n        wc.hInstance &#061; g_hInst;<br \/>\n        wc.hbrBackground &#061; (HBRUSH)(COLOR_WINDOW &#043; 1);<br \/>\n        wc.lpszClassName &#061; &#034;XuanHelpWnd&#034;;<br \/>\n        wc.hCursor &#061; LoadCursor(NULL, IDC_ARROW);<br \/>\n        wc.hIcon &#061; LoadIcon(NULL, IDI_INFORMATION);<br \/>\n        RegisterClassA(&amp;wc);<br \/>\n    }<br \/>\n    g_hHelpWnd &#061; CreateWindowExA(0, &#034;XuanHelpWnd&#034;, XA(&#034;\u300a\u7384\u300b\u8bed\u8a00\u7528\u6cd5\u5927\u5168&#034;),<br \/>\n        WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 700,<br \/>\n        g_hMainWnd, NULL, g_hInst, NULL);<br \/>\n    if (!g_hHelpWnd) return;<br \/>\n    ShowWindow(g_hHelpWnd, SW_SHOW);<br \/>\n    UpdateWindow(g_hHelpWnd);<br \/>\n    EnableWindow(g_hMainWnd, FALSE);<br \/>\n    MSG msg;<br \/>\n    while (g_hHelpWnd &amp;&amp; IsWindow(g_hHelpWnd) &amp;&amp; GetMessage(&amp;msg, NULL, 0, 0)) {<br \/>\n        TranslateMessage(&amp;msg);<br \/>\n        DispatchMessage(&amp;msg);<br \/>\n    }<br \/>\n    EnableWindow(g_hMainWnd, TRUE);<br \/>\n    SetForegroundWindow(g_hMainWnd);<br \/>\n}<\/p>\n<p>\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\/\/ \u6587\u4ef6\u64cd\u4f5c<br \/>\n\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\nvoid SetStatusText(const string&amp; text) {<br \/>\n    SendMessageA(g_hStatusBar, SB_SETTEXTA, 0, (LPARAM)text.c_str());<br \/>\n}<\/p>\n<p>static bool IsDirty() {<br \/>\n    if (!g_hEdit) return false;<br \/>\n    return SendMessage(g_hEdit, EM_GETMODIFY, 0, 0) !&#061; 0;<br \/>\n}<br \/>\nstatic void ClearDirty() {<br \/>\n    if (g_hEdit) SendMessage(g_hEdit, EM_SETMODIFY, FALSE, 0);<br \/>\n}<\/p>\n<p>bool SaveFile(const string&amp; content, bool saveAs&#061;false) {<br \/>\n    if (saveAs || g_currentFilePath.empty()) {<br \/>\n        OPENFILENAMEA ofn &#061; {};<br \/>\n        char fileName[MAX_PATH] &#061; &#034;&#034;;<br \/>\n        ofn.lStructSize &#061; sizeof(ofn);<br \/>\n        ofn.hwndOwner &#061; g_hMainWnd;<br \/>\n        ofn.lpstrFilter &#061; GetFilterAnsi();<br \/>\n        ofn.lpstrFile &#061; fileName;<br \/>\n        ofn.nMaxFile &#061; MAX_PATH;<br \/>\n        ofn.lpstrDefExt &#061; GetDefExtAnsi();<br \/>\n        ofn.Flags &#061; OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST;<br \/>\n        if (!GetSaveFileNameA(&amp;ofn)) return false;<br \/>\n        g_currentFilePath &#061; fileName;<br \/>\n    }<br \/>\n    write_file(g_currentFilePath, content);<br \/>\n    ClearDirty();<br \/>\n    size_t pos &#061; g_currentFilePath.find_last_of(&#034;\/\\\\\\\\&#034;);<br \/>\n    g_currentFileName &#061; (pos &#061;&#061; string::npos) ? g_currentFilePath : g_currentFilePath.substr(pos&#043;1);<br \/>\n    SetStatusText(g_currentFileName);<br \/>\n    return true;<br \/>\n}<\/p>\n<p>bool OpenFile() {<br \/>\n    OPENFILENAMEA ofn &#061; {};<br \/>\n    char fileName[MAX_PATH] &#061; &#034;&#034;;<br \/>\n    ofn.lStructSize &#061; sizeof(ofn);<br \/>\n    ofn.hwndOwner &#061; g_hMainWnd;<br \/>\n    ofn.lpstrFilter &#061; GetFilterAnsi();<br \/>\n    ofn.lpstrFile &#061; fileName;<br \/>\n    ofn.nMaxFile &#061; MAX_PATH;<br \/>\n    ofn.Flags &#061; OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST;<br \/>\n    if (!GetOpenFileNameA(&amp;ofn)) return false;<br \/>\n    g_currentFilePath &#061; fileName;<br \/>\n    string content &#061; read_file(g_currentFilePath);<br \/>\n    if (looks_like_utf8(content)) content &#061; utf8_to_ansi(content);<br \/>\n    SetWindowTextA(g_hEdit, content.c_str());<br \/>\n    ClearDirty();<br \/>\n    size_t pos &#061; g_currentFilePath.find_last_of(&#034;\/\\\\\\\\&#034;);<br \/>\n    g_currentFileName &#061; (pos &#061;&#061; string::npos) ? g_currentFilePath : g_currentFilePath.substr(pos&#043;1);<br \/>\n    SetStatusText(g_currentFileName);<br \/>\n    return true;<br \/>\n}<\/p>\n<p>string GetEditContent() {<br \/>\n    int len &#061; GetWindowTextLength(g_hEdit) &#043; 1;<br \/>\n    if (len &lt;&#061; 1) return &#034;&#034;;<br \/>\n    char* buf &#061; new char[len];<br \/>\n    GetWindowTextA(g_hEdit, buf, len);<br \/>\n    string s &#061; buf;<br \/>\n    delete[] buf;<br \/>\n    return s;<br \/>\n}<\/p>\n<p>static bool ConfirmDiscardOrSave(HWND hWnd, const char* prompt) {<br \/>\n    if (!IsDirty()) return true;<br \/>\n    int r &#061; MessageBoxA(hWnd, XA(prompt), XA(&#034;\u786e\u8ba4&#034;),<br \/>\n                        MB_YESNOCANCEL | MB_ICONQUESTION);<br \/>\n    if (r &#061;&#061; IDCANCEL) return false;<br \/>\n    if (r &#061;&#061; IDNO) return true;<br \/>\n    if (!SaveFile(GetEditContent(), false)) return false;<br \/>\n    return true;<br \/>\n}<\/p>\n<p>\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\/\/ \u4e3b\u7a97\u53e3\u8fc7\u7a0b<br \/>\n\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\nLRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {<br \/>\n    switch (msg) {<br \/>\n        case WM_CREATE: {<br \/>\n            HMENU hMenuBar  &#061; CreateMenu();<br \/>\n            HMENU hFileMenu &#061; CreatePopupMenu();<br \/>\n            HMENU hEditMenu &#061; CreatePopupMenu();<br \/>\n            HMENU hRunMenu  &#061; CreatePopupMenu();<br \/>\n            HMENU hHelpMenu &#061; CreatePopupMenu();<\/p>\n<p>            AppendMenuA(hFileMenu, MF_STRING, IDM_FILE_NEW,    XA(&#034;\u65b0\u5efa(&amp;N)&#034;));<br \/>\n            AppendMenuA(hFileMenu, MF_STRING, IDM_FILE_OPEN,   XA(&#034;\u6253\u5f00(&amp;O)&#8230;&#034;));<br \/>\n            AppendMenuA(hFileMenu, MF_STRING, IDM_FILE_SAVE,   XA(&#034;\u4fdd\u5b58(&amp;S)&#034;));<br \/>\n            AppendMenuA(hFileMenu, MF_STRING, IDM_FILE_SAVEAS, XA(&#034;\u53e6\u5b58\u4e3a(&amp;A)&#8230;&#034;));<br \/>\n            AppendMenuA(hFileMenu, MF_SEPARATOR, 0, NULL);<br \/>\n            AppendMenuA(hFileMenu, MF_STRING, IDM_FILE_EXIT,   XA(&#034;\u9000\u51fa(&amp;X)&#034;));<br \/>\n            AppendMenuA(hEditMenu, MF_STRING, IDM_EDIT_CUT,   XA(&#034;\u526a\u5207(&amp;T)&#034;));<br \/>\n            AppendMenuA(hEditMenu, MF_STRING, IDM_EDIT_COPY,  XA(&#034;\u590d\u5236(&amp;C)&#034;));<br \/>\n            AppendMenuA(hEditMenu, MF_STRING, IDM_EDIT_PASTE, XA(&#034;\u7c98\u8d34(&amp;P)&#034;));<br \/>\n            AppendMenuA(hRunMenu, MF_STRING, IDM_RUN_COMPILE, XA(&#034;\u7f16\u8bd1(&amp;B)&#034;));<br \/>\n            AppendMenuA(hRunMenu, MF_STRING, IDM_RUN_RUN,     XA(&#034;\u8fd0\u884c(&amp;R)&#034;));<br \/>\n            AppendMenuA(hRunMenu, MF_STRING, IDM_RUN_STOP,    XA(&#034;\u505c\u6b62(&amp;S)&#034;));<br \/>\n            AppendMenuA(hHelpMenu, MF_STRING, IDM_HELP_MANUAL, XA(&#034;\u7528\u6cd5\u5927\u5168(&amp;H)&#034;));<br \/>\n            AppendMenuA(hHelpMenu, MF_STRING, IDM_HELP_ABOUT,  XA(&#034;\u5173\u4e8e(&amp;A)&#034;));<\/p>\n<p>            AppendMenuA(hMenuBar, MF_POPUP, (UINT_PTR)hFileMenu, XA(&#034;\u6587\u4ef6(&amp;F)&#034;));<br \/>\n            AppendMenuA(hMenuBar, MF_POPUP, (UINT_PTR)hEditMenu, XA(&#034;\u7f16\u8f91(&amp;E)&#034;));<br \/>\n            AppendMenuA(hMenuBar, MF_POPUP, (UINT_PTR)hRunMenu,  XA(&#034;\u8fd0\u884c(&amp;R)&#034;));<br \/>\n            AppendMenuA(hMenuBar, MF_POPUP, (UINT_PTR)hHelpMenu, XA(&#034;\u5e2e\u52a9(&amp;H)&#034;));<br \/>\n            SetMenu(hWnd, hMenuBar);<\/p>\n<p>            g_hEdit &#061; CreateWindowExA(WS_EX_CLIENTEDGE, &#034;EDIT&#034;, &#034;&#034;,<br \/>\n                WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL |<br \/>\n                ES_AUTOHSCROLL | WS_HSCROLL,<br \/>\n                0, 0, 0, 0, hWnd, (HMENU)101, g_hInst, NULL);<br \/>\n            SendMessage(g_hEdit, WM_SETFONT, (WPARAM)g_hFont, TRUE);<\/p>\n<p>            g_hOutput &#061; CreateWindowExA(WS_EX_CLIENTEDGE, &#034;EDIT&#034;, &#034;&#034;,<br \/>\n                WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL |<br \/>\n                ES_AUTOHSCROLL | WS_HSCROLL | ES_READONLY,<br \/>\n                0, 0, 0, 0, hWnd, (HMENU)102, g_hInst, NULL);<br \/>\n            SendMessage(g_hOutput, WM_SETFONT, (WPARAM)g_hOutFont, TRUE);<\/p>\n<p>            g_hBtnSave    &#061; CreateWindowA(&#034;BUTTON&#034;, XA(&#034;\u4fdd\u5b58&#034;), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 5,5,70,28,   hWnd,(HMENU)IDB_SAVE,g_hInst,NULL);<br \/>\n            g_hBtnCompile &#061; CreateWindowA(&#034;BUTTON&#034;, XA(&#034;\u7f16\u8bd1&#034;), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 80,5,70,28,  hWnd,(HMENU)IDB_COMPILE,g_hInst,NULL);<br \/>\n            g_hBtnRun     &#061; CreateWindowA(&#034;BUTTON&#034;, XA(&#034;\u8fd0\u884c&#034;), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 155,5,70,28, hWnd,(HMENU)IDB_RUN,g_hInst,NULL);<br \/>\n            g_hBtnStop    &#061; CreateWindowA(&#034;BUTTON&#034;, XA(&#034;\u505c\u6b62&#034;), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 230,5,70,28, hWnd,(HMENU)IDB_STOP,g_hInst,NULL);<br \/>\n            EnableWindow(g_hBtnStop, FALSE);<br \/>\n            g_hBtnClear   &#061; CreateWindowA(&#034;BUTTON&#034;, XA(&#034;\u6e05\u7a7a&#034;), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 305,5,70,28, hWnd,(HMENU)IDB_CLEAR,g_hInst,NULL);<\/p>\n<p>            g_hStatusBar &#061; CreateWindowA(STATUSCLASSNAMEA, XA(&#034;\u672a\u547d\u540d.\u7384&#034;),<br \/>\n                WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hWnd, (HMENU)301, g_hInst, NULL);<\/p>\n<p>            const char* demo &#061;<br \/>\n                &#034;\u5934\u6587\u4ef6\u300a\u6807\u51c6IO\u300b\\\\n&#034;<br \/>\n                &#034;\u4f7f\u7528\u547d\u540d\u7a7a\u95f4\u6807\u51c6&#xff1b;\\\\n&#034;<br \/>\n                &#034;\\\\n&#034;<br \/>\n                &#034;\u6574\u6570 \u6c42\u548c&#xff08;\u6574\u6570 x&#xff0c;\u6574\u6570 y&#xff09;\u300a\\\\n&#034;<br \/>\n                &#034;    \u8fd4\u56de x \u52a0 y&#xff1b;\\\\n&#034;<br \/>\n                &#034;\u300b\\\\n&#034;<br \/>\n                &#034;\\\\n&#034;<br \/>\n                &#034;\u4e3b\u7a0b\u5e8f&#xff1a;\\\\n&#034;<br \/>\n                &#034;    \u91cd\u590d 3 \u6b21 \u300a\\\\n&#034;<br \/>\n                &#034;        \u8f93\u51fa&#xff1a;\\\\&#034;\u4f60\u597d\\\\&#034;&#xff1a;\u6362\u884c&#xff1b;\\\\n&#034;<br \/>\n                &#034;    \u300b\\\\n&#034;<br \/>\n                &#034;\\\\n&#034;<br \/>\n                &#034;    \u5bf9\u4e8e i \u4ece 1 \u5230 5 \u300a\\\\n&#034;<br \/>\n                &#034;        \u8f93\u51fa&#xff1a;\\\\&#034;i&#061;\\\\&#034;&#xff1a;i&#xff1a;\u6362\u884c&#xff1b;\\\\n&#034;<br \/>\n                &#034;    \u300b\\\\n&#034;<br \/>\n                &#034;\\\\n&#034;<br \/>\n                &#034;    \u5bf9\u4e8e k \u4ece 3 \u5230 1 \u9012\u51cf \u300a\\\\n&#034;<br \/>\n                &#034;        \u8f93\u51fa&#xff1a;\\\\&#034;k&#061;\\\\&#034;&#xff1a;k&#xff1a;\u6362\u884c&#xff1b;\\\\n&#034;<br \/>\n                &#034;    \u300b\\\\n&#034;<br \/>\n                &#034;\\\\n&#034;<br \/>\n                &#034;    \u6574\u6570 \u5206\u6570 &#061; 85&#xff1b;\\\\n&#034;<br \/>\n                &#034;    \u82e5 \u5206\u6570 \u5927\u4e8e 90 \u5219 \u8f93\u51fa&#xff1a;\\\\&#034;\u4f18\\\\&#034;&#xff1a;\u6362\u884c&#xff1b;\\\\n&#034;<br \/>\n                &#034;    \u5426\u5219\u82e5 \u5206\u6570 \u5927\u4e8e 60 \u5219 \u8f93\u51fa&#xff1a;\\\\&#034;\u53ca\u683c\\\\&#034;&#xff1a;\u6362\u884c&#xff1b;\\\\n&#034;<br \/>\n                &#034;    \u5426\u5219 \u8f93\u51fa&#xff1a;\\\\&#034;\u4e0d\u53ca\u683c\\\\&#034;&#xff1a;\u6362\u884c&#xff1b;\\\\n&#034;<br \/>\n                &#034;\\\\n&#034;<br \/>\n                &#034;    \u8f93\u51fa&#xff1a;\\\\&#034;\u9ab0\u5b50&#061;\\\\&#034;&#xff1a;\u5366 1 \u5230 6&#xff1a;\u6362\u884c&#xff1b;\\\\n&#034;<br \/>\n                &#034;    \u8f93\u51fa&#xff1a;\\\\&#034;sizeof(int)&#061;\\\\&#034;&#xff1a;\u5927\u5c0f&#xff08;\u6574\u6570&#xff09;&#xff1a;\u6362\u884c&#xff1b;\\\\n&#034;<br \/>\n                &#034;    \u8f93\u51fa&#xff1a;\\\\&#034;sizeof(short)&#061;\\\\&#034;&#xff1a;\u5927\u5c0f&#xff08;\u77ed\u6574\u6570&#xff09;&#xff1a;\u6362\u884c&#xff1b;\\\\n&#034;<br \/>\n                &#034;    \u8f93\u51fa&#xff1a;\\\\&#034;sizeof(long long)&#061;\\\\&#034;&#xff1a;\u5927\u5c0f&#xff08;\u957f\u6574\u6570&#xff09;&#xff1a;\u6362\u884c&#xff1b;\\\\n&#034;<br \/>\n                &#034;\\\\n&#034;<br \/>\n                &#034;    \u6574\u6570 n &#061; 0&#xff1b;\\\\n&#034;<br \/>\n                &#034;    \u73af \u300a\\\\n&#034;<br \/>\n                &#034;        n \u9012\u589e&#xff1b;\\\\n&#034;<br \/>\n                &#034;        \u82e5 n \u5927\u4e8e 3 \u5219 \u8df3\u51fa&#xff1b;\\\\n&#034;<br \/>\n                &#034;    \u300b\\\\n&#034;<br \/>\n                &#034;    \u8f93\u51fa&#xff1a;\\\\&#034;n&#061;\\\\&#034;&#xff1a;n&#xff1a;\u6362\u884c&#xff1b;\\\\n&#034;<br \/>\n                &#034;\\\\n&#034;<br \/>\n                &#034;    \u6574\u6570 a &#061; 10&#xff1b;\\\\n&#034;<br \/>\n                &#034;    \u6574\u6570 b &#061; 0&#xff1b;\\\\n&#034;<br \/>\n                &#034;    \u5bf9\u4e8e&#xff08;\u6574\u6570 i &#061; 0&#xff1b; i \u6bd4 a \u5c0f&#xff1b; i \u9012\u589e&#xff09;\u300a\\\\n&#034;<br \/>\n                &#034;        b &#061; \u6c42\u548c&#xff08;b&#xff0c;i&#xff09;&#xff1b;\\\\n&#034;<br \/>\n                &#034;    \u300b\\\\n&#034;<br \/>\n                &#034;    \u8f93\u51fa&#xff1a;\\\\&#034;\u603b\u548c&#061;\\\\&#034;&#xff1a;b&#xff1a;\u6362\u884c&#xff1b;\\\\n&#034;<br \/>\n                &#034;\\\\n&#034;<br \/>\n                &#034;    \u6574\u6570\u5217\u8868 v &#061; \u301010&#xff0c; 20&#xff0c; 30\u3011&#xff1b;\\\\n&#034;<br \/>\n                &#034;    \u5bf9\u4e8e&#xff08;\u6574\u6570 i &#061; 0&#xff1b; i \u6bd4 v.size&#xff08;&#xff09; \u5c0f&#xff1b; i \u9012\u589e&#xff09;\u300a\\\\n&#034;<br \/>\n                &#034;        \u8f93\u51fa&#xff1a;v\u300ci\u300d&#xff1a;\u6362\u884c&#xff1b;\\\\n&#034;<br \/>\n                &#034;    \u300b\\\\n&#034;<br \/>\n                &#034;\\\\n&#034;<br \/>\n                &#034;    \u6574\u6570 \u603b\u6bd4 &#061; 100&#xff1b;\\\\n&#034;<br \/>\n                &#034;    \u8f93\u51fa&#xff1a;\\\\&#034;\u603b\u6bd4&#061;\\\\&#034;&#xff1a;\u603b\u6bd4&#xff1a;\u6362\u884c&#xff1b;\\\\n&#034;<br \/>\n                &#034;\\\\n&#034;<br \/>\n                &#034;    \u6574\u6570 \u539f\u5219 &#061; 7&#xff1b;\\\\n&#034;<br \/>\n                &#034;    \u8f93\u51fa&#xff1a;\\\\&#034;\u539f\u5219&#061;\\\\&#034;&#xff1a;\u539f\u5219&#xff1a;\u6362\u884c&#xff1b;\\\\n&#034;<br \/>\n                &#034;\\\\n&#034;<br \/>\n                &#034;    \u8fd4\u56de 0&#xff1b;\\\\n&#034;<br \/>\n                &#034;\u3002\\\\n&#034;;<br \/>\n            SetWindowTextA(g_hEdit, to_ansi(demo).c_str());<br \/>\n            ClearDirty();<br \/>\n            return 0;<br \/>\n        }<\/p>\n<p>        case WM_SIZE: {<br \/>\n            RECT rc; GetClientRect(hWnd, &amp;rc);<br \/>\n            int w &#061; rc.right &#8211; rc.left, h &#061; rc.bottom &#8211; rc.top;<br \/>\n            int toolbarH &#061; 40, outH &#061; 140, statusH &#061; 25;<br \/>\n            int editH &#061; h &#8211; toolbarH &#8211; outH &#8211; statusH &#8211; 15;<br \/>\n            if (editH &lt; 50) editH &#061; 50;<br \/>\n            SetWindowPos(g_hEdit, NULL, 5, toolbarH&#043;5, w-10, editH, SWP_NOZORDER);<br \/>\n            SetWindowPos(g_hOutput, NULL, 5, toolbarH&#043;10&#043;editH, w-10, outH-5, SWP_NOZORDER);<br \/>\n            SendMessage(g_hStatusBar, WM_SIZE, 0, 0);<br \/>\n            return 0;<br \/>\n        }<\/p>\n<p>        case WM_COMMAND: {<br \/>\n            int id &#061; LOWORD(wParam);<br \/>\n            if (id &#061;&#061; IDM_FILE_NEW) {<br \/>\n                if (!ConfirmDiscardOrSave(hWnd, &#034;\u5f53\u524d\u4ee3\u7801\u5df2\u4fee\u6539&#xff0c;\u662f\u5426\u4fdd\u5b58&#xff1f;&#034;)) break;<br \/>\n                SetWindowTextA(g_hEdit, &#034;&#034;);<br \/>\n                g_currentFilePath &#061; &#034;&#034;;<br \/>\n                g_currentFileName &#061; to_ansi(&#034;\u672a\u547d\u540d.\u7384&#034;);<br \/>\n                SetStatusText(g_currentFileName);<br \/>\n                ClearDirty();<br \/>\n            }<br \/>\n            else if (id &#061;&#061; IDM_FILE_OPEN) {<br \/>\n                if (!ConfirmDiscardOrSave(hWnd, &#034;\u5f53\u524d\u4ee3\u7801\u5df2\u4fee\u6539&#xff0c;\u662f\u5426\u4fdd\u5b58&#xff1f;&#034;)) break;<br \/>\n                OpenFile();<br \/>\n            }<br \/>\n            else if (id &#061;&#061; IDM_FILE_SAVE) SaveFile(GetEditContent(), false);<br \/>\n            else if (id &#061;&#061; IDM_FILE_SAVEAS) SaveFile(GetEditContent(), true);<br \/>\n            else if (id &#061;&#061; IDM_FILE_EXIT) PostMessage(hWnd, WM_CLOSE, 0, 0);<br \/>\n            else if (id &#061;&#061; IDM_EDIT_CUT) SendMessage(g_hEdit, WM_CUT, 0, 0);<br \/>\n            else if (id &#061;&#061; IDM_EDIT_COPY) SendMessage(g_hEdit, WM_COPY, 0, 0);<br \/>\n            else if (id &#061;&#061; IDM_EDIT_PASTE) SendMessage(g_hEdit, WM_PASTE, 0, 0);<br \/>\n            else if (id &#061;&#061; IDM_RUN_COMPILE || id &#061;&#061; IDB_COMPILE) {<br \/>\n                if (g_isCompiling || g_isRunning) break;<br \/>\n                string src &#061; GetEditContent();<br \/>\n                if (!g_currentFilePath.empty()) write_file(g_currentFilePath, src);<br \/>\n                SetWindowTextA(g_hOutput, XA(&#034;\u6b63\u5728\u7f16\u8bd1&#8230;\\\\n&#034;));<br \/>\n                EnableWindow(g_hBtnCompile, FALSE);<br \/>\n                EnableWindow(g_hBtnRun, FALSE);<br \/>\n                g_isCompiling &#061; true;<br \/>\n                g_stopRequested.store(false);<br \/>\n                CompileJob* pJob &#061; new CompileJob();<br \/>\n                pJob-&gt;src &#061; src; pJob-&gt;runAfter &#061; false;<br \/>\n                uintptr_t th &#061; _beginthreadex(NULL, 0, CompileThreadProc, pJob, 0, NULL);<br \/>\n                if (th) {<br \/>\n                    CloseHandle((HANDLE)(intptr_t)th);<br \/>\n                } else {<br \/>\n                    delete pJob;<br \/>\n                    g_isCompiling &#061; false;<br \/>\n                    EnableWindow(g_hBtnCompile, TRUE);<br \/>\n                    EnableWindow(g_hBtnRun, TRUE);<br \/>\n                    SetWindowTextA(g_hOutput, XA(&#034;\u7ebf\u7a0b\u521b\u5efa\u5931\u8d25\\\\n&#034;));<br \/>\n                }<br \/>\n            }<br \/>\n            else if (id &#061;&#061; IDM_RUN_RUN || id &#061;&#061; IDB_RUN) {<br \/>\n                if (g_isCompiling || g_isRunning) break;<br \/>\n                string src &#061; GetEditContent();<br \/>\n                if (!g_currentFilePath.empty()) write_file(g_currentFilePath, src);<br \/>\n                SetWindowTextA(g_hOutput, XA(&#034;\u6b63\u5728\u7f16\u8bd1\u5e76\u8fd0\u884c&#8230;\\\\n&#034;));<br \/>\n                EnableWindow(g_hBtnCompile, FALSE);<br \/>\n                EnableWindow(g_hBtnRun, FALSE);<br \/>\n                EnableWindow(g_hBtnStop, TRUE);<br \/>\n                g_isRunning &#061; true;<br \/>\n                g_stopRequested.store(false);<br \/>\n                CompileJob* pJob &#061; new CompileJob();<br \/>\n                pJob-&gt;src &#061; src; pJob-&gt;runAfter &#061; true;<br \/>\n                uintptr_t th &#061; _beginthreadex(NULL, 0, CompileThreadProc, pJob, 0, NULL);<br \/>\n                if (th) {<br \/>\n                    CloseHandle((HANDLE)(intptr_t)th);<br \/>\n                } else {<br \/>\n                    delete pJob;<br \/>\n                    g_isRunning &#061; false;<br \/>\n                    EnableWindow(g_hBtnCompile, TRUE);<br \/>\n                    EnableWindow(g_hBtnRun, TRUE);<br \/>\n                    EnableWindow(g_hBtnStop, FALSE);<br \/>\n                    SetWindowTextA(g_hOutput, XA(&#034;\u7ebf\u7a0b\u521b\u5efa\u5931\u8d25\\\\n&#034;));<br \/>\n                }<br \/>\n            }<br \/>\n            else if (id &#061;&#061; IDM_RUN_STOP || id &#061;&#061; IDB_STOP) {<br \/>\n                g_stopRequested.store(true);<br \/>\n                KillOutputExe();<br \/>\n                EnableWindow(g_hBtnStop, FALSE);<br \/>\n                EnableWindow(g_hBtnCompile, FALSE);<br \/>\n                EnableWindow(g_hBtnRun, FALSE);<br \/>\n                SetWindowTextA(g_hOutput, XA(&#034;\u6b63\u5728\u505c\u6b62&#8230;\\\\n&#034;));<br \/>\n            }<br \/>\n            else if (id &#061;&#061; IDB_SAVE) SaveFile(GetEditContent(), false);<br \/>\n            else if (id &#061;&#061; IDB_CLEAR) SetWindowTextA(g_hOutput, &#034;&#034;);<br \/>\n            else if (id &#061;&#061; IDM_HELP_MANUAL) ShowHelp();<br \/>\n            else if (id &#061;&#061; IDM_HELP_ABOUT) {<br \/>\n                MessageBoxA(hWnd,<br \/>\n                    XA(&#034;\u300a\u7384\u300bIDE v3.6.3\\\\n\\\\n\u4e00\u4e2a\u7528\u4e2d\u6587\u7f16\u5199\u7a0b\u5e8f\u7684 IDE\\\\n\\\\n&#034;<br \/>\n                       &#034;\u65b0\u589e&#xff1a;\u65e0\u7b26\u53f7\/\u77ed\/\u957f\/\u8d85\u957f\u6574\u6570\u53ca\u6307\u9488\/\u5217\u8868\\\\n&#034;<br \/>\n                       &#034;\u4fee\u590d&#xff1a;\u5d4c\u5957 \u91cd\u590d \u8ba1\u6570\u5668\u540c\u540d\u906e\u853d&#034;),<br \/>\n                    XA(&#034;\u5173\u4e8e&#034;), MB_OK|MB_ICONINFORMATION);<br \/>\n            }<br \/>\n            return 0;<br \/>\n        }<\/p>\n<p>        case WM_UPDATE_OUTPUT: {<br \/>\n            string* pMsg &#061; (string*)lParam;<br \/>\n            if (pMsg) {<br \/>\n                if (wParam &#061;&#061; 0) SetWindowTextA(g_hOutput, pMsg-&gt;c_str());<br \/>\n                else {<br \/>\n                    int len &#061; GetWindowTextLengthA(g_hOutput);<br \/>\n                    char* cur &#061; new char[len&#043;1];<br \/>\n                    GetWindowTextA(g_hOutput, cur, len&#043;1);<br \/>\n                    string nt &#061; string(cur) &#043; *pMsg;<br \/>\n                    delete[] cur;<br \/>\n                    SetWindowTextA(g_hOutput, nt.c_str());<br \/>\n                }<br \/>\n                delete pMsg;<br \/>\n            }<br \/>\n            return 0;<br \/>\n        }<\/p>\n<p>        case WM_COMPILE_FINISHED: {<br \/>\n            g_isCompiling &#061; false;<br \/>\n            g_isRunning &#061; false;<br \/>\n            g_stopRequested.store(false);<br \/>\n            EnableWindow(g_hBtnCompile, TRUE);<br \/>\n            EnableWindow(g_hBtnRun, TRUE);<br \/>\n            EnableWindow(g_hBtnStop, FALSE);<br \/>\n            return 0;<br \/>\n        }<\/p>\n<p>        case WM_CLOSE:<br \/>\n            if (!ConfirmDiscardOrSave(hWnd, &#034;\u9000\u51fa\u524d\u662f\u5426\u4fdd\u5b58\u4fee\u6539&#xff1f;&#034;)) return 0;<br \/>\n            DestroyWindow(hWnd);<br \/>\n            return 0;<\/p>\n<p>        case WM_DESTROY: {<br \/>\n            g_hMainWnd &#061; NULL;<\/p>\n<p>            KillOutputExe();<\/p>\n<p>            if (g_tempDir !&#061; &#034;.&#034;) {<br \/>\n                string cppPath &#061; g_tempDir &#043; &#034;\\\\\\\\output.cpp&#034;;<br \/>\n                string exePath &#061; g_tempDir &#043; &#034;\\\\\\\\output.exe&#034;;<br \/>\n                DeleteFileA(cppPath.c_str());<br \/>\n                DeleteFileA(exePath.c_str());<br \/>\n                RemoveDirectoryA(g_tempDir.c_str());<br \/>\n            }<\/p>\n<p>            PostQuitMessage(0);<br \/>\n            return 0;<br \/>\n        }<br \/>\n    }<br \/>\n    return DefWindowProc(hWnd, msg, wParam, lParam);<br \/>\n}<\/p>\n<p>\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\/\/ \u5165\u53e3<br \/>\n\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\nstatic void InitTempDir() {<br \/>\n    char tempPath[MAX_PATH];<br \/>\n    DWORD len &#061; GetTempPathA(MAX_PATH, tempPath);<br \/>\n    if (len &gt; 0 &amp;&amp; len &lt; MAX_PATH) {<br \/>\n        char pidStr[32];<br \/>\n        snprintf(pidStr, sizeof(pidStr), &#034;xuan_ide_%lu&#034;,<br \/>\n                 (unsigned long)GetCurrentProcessId());<br \/>\n        string dir &#061; string(tempPath) &#043; pidStr;<br \/>\n        CreateDirectoryA(dir.c_str(), NULL);<br \/>\n        DWORD attr &#061; GetFileAttributesA(dir.c_str());<br \/>\n        if (attr !&#061; INVALID_FILE_ATTRIBUTES &amp;&amp; (attr &amp; FILE_ATTRIBUTE_DIRECTORY))<br \/>\n            g_tempDir &#061; dir;<br \/>\n    }<br \/>\n}<\/p>\n<p>int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {<br \/>\n    (void)hPrevInstance; (void)lpCmdLine;<\/p>\n<p>    {<br \/>\n        typedef BOOL (WINAPI *PFN_DPIAWARE)();<br \/>\n        HMODULE hU &#061; GetModuleHandleA(&#034;user32.dll&#034;);<br \/>\n        if (hU) {<br \/>\n            PFN_DPIAWARE pFn &#061; (PFN_DPIAWARE)GetProcAddress(hU, &#034;SetProcessDPIAware&#034;);<br \/>\n            if (pFn) pFn();<br \/>\n        }<br \/>\n    }<\/p>\n<p>    g_hInst &#061; hInstance;<br \/>\n    g_currentFileName &#061; to_ansi(&#034;\u672a\u547d\u540d.\u7384&#034;);<br \/>\n    InitTempDir();<\/p>\n<p>    INITCOMMONCONTROLSEX icex &#061; {sizeof(icex), ICC_WIN95_CLASSES};<br \/>\n    InitCommonControlsEx(&amp;icex);<\/p>\n<p>    g_hFont &#061; CreateFontA(18,0,0,0,FW_NORMAL,0,0,0, DEFAULT_CHARSET,<br \/>\n        OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,<br \/>\n        DEFAULT_PITCH|FF_DONTCARE, XA(&#034;\u5b8b\u4f53&#034;));<br \/>\n    g_hOutFont &#061; CreateFontA(16,0,0,0,FW_NORMAL,0,0,0, DEFAULT_CHARSET,<br \/>\n        OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,<br \/>\n        DEFAULT_PITCH|FF_DONTCARE, XA(&#034;\u5b8b\u4f53&#034;));<\/p>\n<p>    WNDCLASSA wc &#061; {};<br \/>\n    wc.lpfnWndProc &#061; WndProc;<br \/>\n    wc.hInstance &#061; hInstance;<br \/>\n    wc.hbrBackground &#061; (HBRUSH)(COLOR_WINDOW&#043;1);<br \/>\n    wc.lpszClassName &#061; &#034;XuanIDE&#034;;<br \/>\n    wc.hCursor &#061; LoadCursor(NULL, IDC_ARROW);<br \/>\n    wc.hIcon &#061; LoadIcon(NULL, IDI_APPLICATION);<br \/>\n    if (!RegisterClassA(&amp;wc)) return 1;<\/p>\n<p>    g_hMainWnd &#061; CreateWindowExA(0, &#034;XuanIDE&#034;, XA(&#034;\u300a\u7384\u300bIDE v3.6.3&#034;),<br \/>\n        WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 1000, 720,<br \/>\n        NULL, NULL, hInstance, NULL);<br \/>\n    if (!g_hMainWnd) return 1;<\/p>\n<p>    ShowWindow(g_hMainWnd, nCmdShow);<br \/>\n    UpdateWindow(g_hMainWnd);<\/p>\n<p>    MSG msg;<br \/>\n    while (GetMessage(&amp;msg, NULL, 0, 0)) {<br \/>\n        TranslateMessage(&amp;msg);<br \/>\n        DispatchMessage(&amp;msg);<br \/>\n    }<br \/>\n    if (g_hFont) DeleteObject(g_hFont);<br \/>\n    if (g_hOutFont) DeleteObject(g_hOutFont);<br \/>\n    return 0;<br \/>\n}<\/p>\n<p>\u54c8\u54c8\u54c8&#xff01;\u300a\u7384\u300b&#xff0c;\u679c\u7136\u7384&#xff01;\u8fd9\u624d\u662f\u7ed9\u4e2d\u56fd\u4eba\u7528\u7684\u8bed\u8a00&#xff01;<\/p>\n<hr \/>\n","protected":false},"excerpt":{"rendered":"<p>\/\/<br \/>\n\/\/ \u300a\u7384\u300bIDE v3.6.3 \u2014 \u5b8c\u6574\u7248<br \/>\n\/\/   v3.6.3 \u65b0\u589e\/\u4fee\u590d&#xff1a;<br \/>\n\/\/     &#8211; pattern \u8865&#xff1a;\u65e0\u7b26\u53f7\u77ed\u6574\u6570\/\u6574\u6570\/\u957f\u6574\u6570&#xff0c;\u8d85\u957f\/\u957f\/\u77ed\u6574\u6570\u53ca\u6307\u9488\/\u5217\u8868<br \/>\n\/\/     &#8211; \u4fee\u590d\u5d4c\u5957 \\&#8221;\u91cd\u590d\\&#8221; \u751f\u6210\u540c\u540d\u8ba1\u6570\u5668 _i_rep_0&#xff08;\u6539\u7528\u72ec\u7acb\u9012\u589e id&#xff09;<br \/>\n\/\/   v3.6.2 \u4fee\u590d&#xff1a;<br \/>\n\/\/     &#8211; BUG-1: \u5219\/\u5219\u2423 \u524d\u8fb9\u754c\u4fdd\u62a4&#xff08;\u4e0d\u8bef\u4f24 \u539f\u5219\/<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[11900,55,70,190,427],"topic":[],"class_list":["post-104618","post","type-post","status-publish","format-standard","hentry","category-server","tag-11900","tag-c","tag-ide","tag-190","tag-427"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u300a\u7384\u300bIDE v3.6.3\u91cd\u78c5\u53d1\u5e03\uff1a\u5168\u529f\u80fd\u4fee\u590d\u4e0e\u6027\u80fd\u98de\u8dc3 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/104618.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u300a\u7384\u300bIDE v3.6.3\u91cd\u78c5\u53d1\u5e03\uff1a\u5168\u529f\u80fd\u4fee\u590d\u4e0e\u6027\u80fd\u98de\u8dc3 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"\/\/ \/\/ \u300a\u7384\u300bIDE v3.6.3 \u2014 \u5b8c\u6574\u7248 \/\/  v3.6.3 \u65b0\u589e\/\u4fee\u590d&#xff1a; \/\/   - pattern \u8865&#xff1a;\u65e0\u7b26\u53f7\u77ed\u6574\u6570\/\u6574\u6570\/\u957f\u6574\u6570&#xff0c;\u8d85\u957f\/\u957f\/\u77ed\u6574\u6570\u53ca\u6307\u9488\/\u5217\u8868 \/\/   - \u4fee\u590d\u5d4c\u5957 &quot;\u91cd\u590d&quot; \u751f\u6210\u540c\u540d\u8ba1\u6570\u5668 _i_rep_0&#xff08;\u6539\u7528\u72ec\u7acb\u9012\u589e id&#xff09; \/\/  v3.6.2 \u4fee\u590d&#xff1a; \/\/   - BUG-1: \u5219\/\u5219\u2423 \u524d\u8fb9\u754c\u4fdd\u62a4&#xff08;\u4e0d\u8bef\u4f24 \u539f\u5219\/\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/104618.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-12T12:17:14+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"41 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/104618.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/104618.html\",\"name\":\"\u300a\u7384\u300bIDE v3.6.3\u91cd\u78c5\u53d1\u5e03\uff1a\u5168\u529f\u80fd\u4fee\u590d\u4e0e\u6027\u80fd\u98de\u8dc3 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2026-09-12T12:17:14+00:00\",\"dateModified\":\"2026-09-12T12:17:14+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/104618.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/104618.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/104618.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u300a\u7384\u300bIDE v3.6.3\u91cd\u78c5\u53d1\u5e03\uff1a\u5168\u529f\u80fd\u4fee\u590d\u4e0e\u6027\u80fd\u98de\u8dc3\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u300a\u7384\u300bIDE v3.6.3\u91cd\u78c5\u53d1\u5e03\uff1a\u5168\u529f\u80fd\u4fee\u590d\u4e0e\u6027\u80fd\u98de\u8dc3 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/104618.html","og_locale":"zh_CN","og_type":"article","og_title":"\u300a\u7384\u300bIDE v3.6.3\u91cd\u78c5\u53d1\u5e03\uff1a\u5168\u529f\u80fd\u4fee\u590d\u4e0e\u6027\u80fd\u98de\u8dc3 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"\/\/ \/\/ \u300a\u7384\u300bIDE v3.6.3 \u2014 \u5b8c\u6574\u7248 \/\/  v3.6.3 \u65b0\u589e\/\u4fee\u590d&#xff1a; \/\/   - pattern \u8865&#xff1a;\u65e0\u7b26\u53f7\u77ed\u6574\u6570\/\u6574\u6570\/\u957f\u6574\u6570&#xff0c;\u8d85\u957f\/\u957f\/\u77ed\u6574\u6570\u53ca\u6307\u9488\/\u5217\u8868 \/\/   - \u4fee\u590d\u5d4c\u5957 \"\u91cd\u590d\" \u751f\u6210\u540c\u540d\u8ba1\u6570\u5668 _i_rep_0&#xff08;\u6539\u7528\u72ec\u7acb\u9012\u589e id&#xff09; \/\/  v3.6.2 \u4fee\u590d&#xff1a; \/\/   - BUG-1: \u5219\/\u5219\u2423 \u524d\u8fb9\u754c\u4fdd\u62a4&#xff08;\u4e0d\u8bef\u4f24 \u539f\u5219\/","og_url":"https:\/\/www.wsisp.com\/helps\/104618.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2026-09-12T12:17:14+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"41 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/104618.html","url":"https:\/\/www.wsisp.com\/helps\/104618.html","name":"\u300a\u7384\u300bIDE v3.6.3\u91cd\u78c5\u53d1\u5e03\uff1a\u5168\u529f\u80fd\u4fee\u590d\u4e0e\u6027\u80fd\u98de\u8dc3 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2026-09-12T12:17:14+00:00","dateModified":"2026-09-12T12:17:14+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/104618.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/104618.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/104618.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"\u300a\u7384\u300bIDE v3.6.3\u91cd\u78c5\u53d1\u5e03\uff1a\u5168\u529f\u80fd\u4fee\u590d\u4e0e\u6027\u80fd\u98de\u8dc3"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/104618","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=104618"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/104618\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=104618"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=104618"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=104618"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=104618"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}