📄 uc2win.cpp
字号:
/*************************************************************************** main.cpp - description ------------------- begin : Tue May 15 14:30:02 GMT-5 2001 copyright : (C) 2001 by ejoy email : ejoy@user.sourceforge.net ***************************************************************************//*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/#ifdef HAVE_CONFIG_H#include <config.h>#endif#include <iostream>#include <cstdlib>#include <string>#include <deque>#include <algorithm>using namespace std;class Word{public: Word(){} Word(const Word& w); ~Word(){}; string mText; string mCode;};Word::Word(const Word& w) { mText = w.mText; mCode = w.mCode;}bool operator<(const Word& w1,const Word& w2) { return w1.mCode < w2.mCode;}bool operator==(const Word& w1,const Word& w2) { return (w1.mCode == w2.mCode && w1.mText == w2.mText);}void ParseHead(istream& in,ostream& out);void ParseText(istream& in,ostream& out);void WriteOption(ostream& out,string& o,string& v);void ParseOption(string& s,string& o,string& v);int main(int argc, char *argv[]){ ParseHead(cin,cout); ParseText(cin,cout); return EXIT_SUCCESS;}void ParseOption(string& s,string& o,string& v) { const char* p = s.c_str(); o = ""; v = ""; while (*p != ' ') { o += *p++; o += *p++; } while (*p == ' ' || *p == '=') p++; while (*p && *p != ' ') v += *p++;}void ParseHead(istream& in,ostream& out) { string s,o,v; int lines = 0; out << "[Description]" << endl; while (in) { getline(in,s); lines++; if (lines >= 28 && lines < 34) continue; if (lines == 34) break; //text area reached if (s.empty()) continue; if (s[0] == ' ') continue; //comments //now process options ParseOption(s,o,v); WriteOption(out,o,v); }}void WriteOption(ostream& out,string& o,string& v) { if (o == "名称") out << "Name=" << v << endl; else if (o == "码元表") out << "UsedCodes=" << v << endl; else if (o == "万能键") out << "WildChar=" << v << endl; else if (o == "最大码长") out << "MaxCodes=" << v << endl;}void ParseText(istream& in,ostream& out) { out << "[Text]" << endl; string s,code,text; deque<class Word> list; unsigned const char *p; while (in) { getline(in,s); if (s.empty()) continue; p = (unsigned const char *)s.c_str(); code = ""; while (*p != ' ' && *p < 0xa1) code += *p++; while (*p == ' ') p++; //now parse a line while (*p) { text = ""; while (*p && *p != ' ' && *p != '*') { text += *p++; text += *p++; } while (*p && (*p == ' ' || *p == '*') ) p++; Word w; w.mText = text; w.mCode = code; list.push_back(w); } } stable_sort(list.begin(),list.end()); deque<class Word>::iterator w; for (w = list.begin();w != list.end();w++) out<<w->mText<<w->mCode<<endl;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -