From 9302f54e04429b33e42220aaefa6022e378b1a4b Mon Sep 17 00:00:00 2001 From: gwdwyy Date: Sun, 18 Aug 2013 00:26:50 +0800 Subject: [PATCH] update cppcommon && adding utf-8 --- demo/segment_demo.cpp | 22 +++++++----- src/TransCode.cpp | 35 ++++++++++++++++--- src/TransCode.h | 10 ++++++ src/cppcommon/argv_functs.cpp | 63 +++++++++++++++++++++++++++++++++-- src/cppcommon/argv_functs.h | 14 ++++++++ src/cppcommon/map_functs.h | 23 +++++++++++++ 6 files changed, 152 insertions(+), 15 deletions(-) diff --git a/demo/segment_demo.cpp b/demo/segment_demo.cpp index e568857..e87bd3f 100644 --- a/demo/segment_demo.cpp +++ b/demo/segment_demo.cpp @@ -5,7 +5,7 @@ using namespace CppJieba; Segment seg; -bool init() +bool init(const char * const filePath) { if(!seg.init()) { @@ -13,7 +13,7 @@ bool init() return false; } - if(!seg.loadSegDict("../dicts/jieba.dict.gbk")) + if(!seg.loadSegDict(filePath)) { cout<<"seg loadDict failed."< mpss; - //getArgvMap(argc, argv, mpss); - //string enc = getMap(mpss, "--encoding", ""); + map mpss; + getArgvMap(argc, argv, mpss); + string enc = getMap(mpss, "--encoding", ""); + string dictPath = getMap(mpss, "--dictpath", "../dicts/jieba.dict.gbk"); - if( argc < 2) + if(argc < 2) { - cout<<"usage: "<<"\n\t"<"< [options]\n" + <<"options:\n" + <<"\t--dictpath\tIf is not specified, the default is ../dicts/jieba.dict.gbk\n" + <<"\t--encoding\tSupported encoding methods are [gbk, utf-8] for now. \n\t\t\tIf is not specified, the default is gbk." + < TransCode::_encVec; + bool TransCode::_isInitted = TransCode::init(); + + bool TransCode::init() + { + _encVec.push_back("utf-8"); + _encVec.push_back("gbk"); + _enc = _encVec[0]; + return true; + } + TransCode::TransCode() { + } TransCode::~TransCode() { } + bool TransCode::setEnc(const string& enc) + { + if(_encVec.empty()) + { + return false; + } + + if(isInVec(_encVec, enc)) + { + _enc = enc; + } + else + { + return false; + } + return true; + } + bool TransCode::strToVec(const string& str, vector& vec) { vec.clear(); diff --git a/src/TransCode.h b/src/TransCode.h index db04eec..1d741aa 100644 --- a/src/TransCode.h +++ b/src/TransCode.h @@ -15,9 +15,19 @@ namespace CppJieba using namespace CPPCOMMON; class TransCode { + private: + static string _enc; + static vector _encVec; + static bool _isInitted; + + public: + static bool setEnc(const string& enc); + public: TransCode(); ~TransCode(); + public: + static bool init(); public: static bool strToVec(const string& str, vector& vec); static string vecToStr(const vector& vec); diff --git a/src/cppcommon/argv_functs.cpp b/src/cppcommon/argv_functs.cpp index 037f6f8..5ddf55c 100644 --- a/src/cppcommon/argv_functs.cpp +++ b/src/cppcommon/argv_functs.cpp @@ -23,6 +23,59 @@ namespace CPPCOMMON return true; } + ArgvContext::ArgvContext(int argc, const char* const * argv) + { + for(int i = 0; i < argc; i++) + { + if(strStartsWith(argv[i], "--")) + { + if(i + 1 < argc && !strStartsWith(argv[i+1], "--")) + { + _mpss[argv[i]] = argv[i+1]; + i++; + } + else + { + break; + } + } + else + { + _args.push_back(argv[i]); + } + } + } + + ArgvContext::~ArgvContext() + { + } + + string ArgvContext::toString() + { + string res; + res += string_format("[%s]\n", joinStr(_args, ", ").c_str()); + res += jsonMPSS(_mpss); + return res; + } + + string ArgvContext::operator [](int i) + { + if(i < _args.size()) + { + return _args[i]; + } + return ""; + } + + string ArgvContext::operator [](const string& key) + { + map::const_iterator it = _mpss.find(key); + if(it != _mpss.end()) + { + return it->second; + } + return ""; + } } @@ -33,9 +86,13 @@ using namespace CPPCOMMON; int main(int argc, char** argv) { - map argvMap; - getArgvMap(argc, argv, argvMap); - PRINT_MAPSS(argvMap); + //map argvMap; + //getArgvMap(argc, argv, argvMap); + //PRINT_MAPSS(argvMap); + ArgvContext arg(argc, argv); + cout<& mpss); + class ArgvContext + { + public : + ArgvContext(int argc, const char* const * argv); + ~ArgvContext(); + public: + string toString(); + string operator [](int i); + string operator [](const string& key); + private: + vector _args; + map _mpss; + + }; } #endif diff --git a/src/cppcommon/map_functs.h b/src/cppcommon/map_functs.h index 6c8a411..6a6707d 100644 --- a/src/cppcommon/map_functs.h +++ b/src/cppcommon/map_functs.h @@ -14,6 +14,29 @@ namespace CPPCOMMON { using namespace std; + inline string jsonMPSS(const map& mpss) + { + if(mpss.empty()) + { + return "{}"; + } + string res("{"); + map::const_iterator it = mpss.begin(); + res += it->first; + res += ": "; + res += it->second; + it++; + while(it != mpss.end()) + { + res += ", "; + res += it->first; + res += ": "; + res += it->second; + it++; + } + res += "}"; + return res; + } template void printMap(const map& mp)