青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

高性能服務(wù)器開發(fā);C++深探

繼續(xù)上一塊磚,引來玉。一個命令行參數(shù)的解析類CArgNodeList

解析命令行參數(shù),全部存入list當(dāng)中,然后提供函數(shù)讀取參數(shù);
upsoft_arg_parser.h
#ifndef _ARGVS_PARSE_H_
#define _ARGVS_PARSE_H_
//
// 應(yīng)用參數(shù)解析類CArgNodeList
// 創(chuàng)建: 2010-06-05 changym, changup@qq.com
// 修改: 
//
//////////////////////////////////////////////////////////////////////
#include <list>

///////////////////////////////////////////////////////
// 參數(shù)是否有指示符-字典定義
///////////////////////////////////////////////////////
typedef enum enumHasSymbol {hsNone/*沒有*/,hsOnly,hsHasValue};

typedef 
struct tagArgNode
{
    tagArgNode(enumHasSymbol hassymbol,
const char* pszsymbol,const char* pszvalue)
    {
        m_pszsymbol 
= m_pszvalue = 0;
        m_hassymbol 
= hassymbol;
        
if(pszsymbol)
        {
            m_pszsymbol 
= new char[strlen(pszsymbol)+1];
            strcpy(m_pszsymbol,pszsymbol);
            m_pszsymbol[strlen(pszsymbol)] 
= '\0';            
        }
        
if(pszvalue)
        {
            m_pszvalue 
= new char[strlen(pszvalue)+1];
            strcpy(m_pszvalue,pszvalue);
            m_pszvalue[strlen(pszvalue)] 
= '\0';
        }
    }
    
~tagArgNode()
    {
        
if(m_pszsymbol)
        {
            delete [] m_pszsymbol;
            m_pszsymbol 
= NULL;
        }
        
if(m_pszvalue)
        {
            delete [] m_pszvalue;
            m_pszvalue 
= NULL;
        }
    }
    
    enumHasSymbol m_hassymbol;
    
char*  m_pszsymbol; //指示符串,不光是單個字符而且也可以是一個單詞
    char*  m_pszvalue;  //指示符值串,當(dāng)hassymbol in (hsNone,hsHasValue)
                        
//的時候有效
}ARGNODE,*PARGNODE;

//////////////////////////////////////////////
// 所有參數(shù)的集合
//
//////////////////////////////////////////////
class CArgNodeList : public list<PARGNODE>
{
public:
    
~CArgNodeList()
    {
        PARGNODE pnode 
= NULL;
        
while(!empty())
        {
            pnode 
= front();
            delete pnode;
            pop_front();
        }
        clear();
    }
public:
    
int parser(int argc,char* argv[])
    {
        PARGNODE pnode 
= NULL;
        
for(int i=0;i<argc;i++)
        {
            
char c = argv[i][0];
            
if(c=='-'//-符號發(fā)現(xiàn)
            {
                
if(!argv[i][1])
                {
                    
//printf("-發(fā)現(xiàn),非法,跳過\n");
                    continue;
                }
                
                
if(argv[i+1]) //后續(xù)有參數(shù)
                {
                    
if(argv[i+1][0]=='-'//后續(xù)是一個新的參數(shù)
                    {
                        
//printf("發(fā)現(xiàn)僅有指示符的參數(shù):%s\n",argv[i]+1);
                        pnode = append(hsOnly,argv[i]+1,NULL);
                        
                    }
                    
else //后續(xù)是當(dāng)前參數(shù)的值
                    {                        
                        
//printf("發(fā)現(xiàn)有指示符而且?guī)?shù)值的參數(shù):%s-%s\n",argv[i]+1,argv[i+1]);
                        pnode = append(hsHasValue,argv[i]+1,argv[i+1]);
                        i
++;
                    }
                }
                
else //后續(xù)沒有了參數(shù),那當(dāng)前參數(shù)就是-h之類的東西
                {
                    
//printf("發(fā)現(xiàn)僅有指示符的參數(shù):%s\n",argv[i]+1);
                    pnode = append(hsOnly,argv[i]+1,NULL);
                }
            }
            
else
            {
                
//printf("發(fā)現(xiàn)光禿禿的參數(shù):%s\n",argv[i]);
                pnode = append(hsNone,NULL,argv[i]);
            }
        }
        
return 1;
    }
public:
    
//根據(jù)符號查找節(jié)點,用于查找 -a option || -a 這樣的參數(shù)節(jié)點
    PARGNODE getnode_symbol(const char* pszsymbol)
    {
        iterator iter 
= begin();
        
while(iter!=end())
        { 
            
if((*iter)->m_hassymbol!=hsNone) //有符號
            {
                
if(!strcmp((*iter)->m_pszsymbol,pszsymbol))
                {
                    
return *iter;
                }
            }
            iter
++;
        }
        
return NULL;
    }
    
    PARGNODE append(enumHasSymbol hassymbol,
const char* pszsymbol,const char* pszvalue)
    {
        PARGNODE pnode 
= new ARGNODE(hassymbol,pszsymbol,pszvalue);
        push_back(pnode);
        
return pnode;
    }
    
    
//值完全匹配查找節(jié)點,用于查找 option 這樣的節(jié)點用
    PARGNODE getnode_value(const char* pszvalue);
    
    
//根據(jù)值的前n位查找節(jié)點,用于查找 name=value這樣的節(jié)點
    PARGNODE getnode_n_value(const char* pszvalue);

public:
    
void print()
    {
        printf(
"++++++++++++開始打印各參數(shù)節(jié)點信息++++++++++++++\n");
        
int i=1;
        iterator iter 
= begin();
        
while(iter != end())
        {
            printf(
"第%d個參數(shù)節(jié)點:\n\t是否有指示符=%s\n\t指示符=%s\n\t值=%s\n",
                    i
++,
                    (
*iter)->m_hassymbol==hsNone?"":((*iter)->m_hassymbol==hsOnly?"僅僅":"含值"),
                    (
*iter)->m_pszsymbol?(*iter)->m_pszsymbol:"NULL",
                    (
*iter)->m_pszvalue?(*iter)->m_pszvalue:"NULL");
            iter
++;
        }
    }    
private:
};

#endif //_ARGVS_PARSE_H_

測試程序:upsoft_arg_parser_test.cpp
#include <stdio.h>
#include 
<stdlib.h>
#include 
<stdlib.h>

#include 
"upsoft_arg_parser.h"

int main(int argc, char* argv[])
{
    printf(
"++++++++++++++++++changup解析測試++++++++++++++++\n");
    
//////////////////////////////////////////////////////////////
    // 可能出現(xiàn)的參數(shù)形式:
    
//  a 沒有-指示   
    
//  -a 只有指示符
    
//  -a changjr 有指示符而且指示出了值
    
//  - 非法的-
    
//  -a changjr=erzi 自定義的參數(shù)值
    
//  changjr=er 直接是參數(shù)值
    //////////////////////////////////////////////////////////////
    // 具體的應(yīng)用應(yīng)該交給應(yīng)用層自己去運用客戶傳入的參數(shù)和參數(shù)規(guī)則
    
//+合法性檢查.
    //////////////////////////////////////////////////////////////
    
    CArgNodeList  argnodelist;
    argnodelist.parser(argc,argv);
    argnodelist.print();
    
    
return 0;
}

posted on 2010-12-15 15:10 changup 閱讀(1741) 評論(0)  編輯 收藏 引用 所屬分類: 隨想

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            免费在线欧美视频| 亚洲自拍偷拍色片视频| 欧美在线free| 国产精品天天摸av网| 中文在线不卡视频| 日韩亚洲综合在线| 欧美日韩久久精品| 亚洲一区日韩在线| 亚洲午夜一级| 国产亚洲激情| 久久综合色综合88| 免费成人美女女| 夜夜嗨av一区二区三区网站四季av| 欧美国产高清| 欧美精品亚洲二区| 亚洲欧美国产日韩中文字幕| 亚洲一区二区黄| 国产一区二区三区四区老人 | 性欧美在线看片a免费观看| 国产精品任我爽爆在线播放| 欧美一级片一区| 久久激情久久| 日韩午夜在线观看视频| 亚洲视频电影在线| 国内精品久久久久影院 日本资源| 老司机免费视频一区二区| 欧美成人69av| 午夜精品久久久久久久| 欧美在线一二三四区| 亚洲国产一成人久久精品| 日韩午夜一区| 国内精品久久久久久久影视麻豆 | 国产人成一区二区三区影院 | 国产一区二区在线观看免费播放| 美女露胸一区二区三区| 亚洲国产欧美久久| 亚洲高清视频的网址| 欧美日韩亚洲一区| 久久视频在线看| 欧美剧在线免费观看网站| 欧美在线观看视频一区二区| 免费看成人av| 欧美一级免费视频| 欧美精品乱码久久久久久按摩| 亚欧美中日韩视频| 欧美成人免费网站| 久久久久五月天| 欧美日韩午夜在线| 欧美3dxxxxhd| 国产乱子伦一区二区三区国色天香| 欧美日韩在线视频一区二区| 久久国产婷婷国产香蕉| 欧美色视频在线| 亚洲国产成人porn| 国产香蕉久久精品综合网| 亚洲精品视频二区| 亚洲欧洲精品一区| 久久久高清一区二区三区| 午夜精品久久久久久99热软件| 欧美成人精品在线观看| 久久综合色综合88| 国产一区二区三区在线播放免费观看| 亚洲精品乱码久久久久久| 在线观看成人av电影| 性xx色xx综合久久久xx| 亚洲欧美一区二区激情| 欧美日韩你懂的| 亚洲国产成人精品视频| 亚洲国产成人久久| 久久青青草综合| 久久五月婷婷丁香社区| 国产一区二区三区四区老人| 欧美一区二区三区男人的天堂| 亚洲欧美日韩国产中文 | 久久综合五月天婷婷伊人| 国产美女一区| 亚洲一区二区在线视频| 午夜在线精品| 国产精品视频一| 欧美亚洲网站| 久久久久久久一区二区三区| 国产亚洲欧美另类一区二区三区| 亚洲欧美成人网| 久久动漫亚洲| 在线播放日韩| 欧美成人蜜桃| 亚洲精品一二三| 在线视频欧美精品| 国产精品国色综合久久| 美女亚洲精品| 亚洲成色www8888| 亚洲一区二区成人| 欧美一区二区三区在线观看视频 | 欧美福利电影在线观看| 亚洲欧洲一区二区三区| 欧美乱人伦中文字幕在线| 亚洲美女福利视频网站| 欧美日韩午夜剧场| 免费在线观看成人av| 亚洲二区在线| 欧美日韩免费高清| 亚洲一区二区三区免费视频| 欧美一级专区| 亚洲国产精品悠悠久久琪琪 | 欧美激情精品久久久久久蜜臀 | 久久久999成人| 欧美国产精品va在线观看| av不卡在线| 国产一级一区二区| 免费黄网站欧美| 亚洲午夜精品一区二区| 欧美mv日韩mv国产网站| 99视频一区二区| 国产午夜精品美女毛片视频| 六月婷婷一区| 亚洲午夜在线观看视频在线| 免费成人在线视频网站| 亚洲视频欧洲视频| 1769国产精品| 国产精品麻豆va在线播放| 久久男女视频| 亚洲免费在线观看视频| 亚洲激精日韩激精欧美精品| 欧美一区二区视频97| 亚洲人成网站精品片在线观看| 国产精品女主播| 免费亚洲电影在线| 亚洲在线黄色| 亚洲国产婷婷综合在线精品| 久久国产黑丝| 亚洲欧美日韩一区在线| 亚洲精品女人| 在线免费观看日本欧美| 国产精品一区三区| 欧美日韩精品系列| 欧美大片在线看免费观看| 久久国产精品网站| 亚洲欧美日韩精品一区二区| 亚洲毛片网站| 亚洲精品乱码久久久久久蜜桃91| 久久综合影视| 久久久久久久成人| 欧美一区二区在线| 亚洲伊人久久综合| 99精品国产在热久久婷婷| 亚洲第一福利在线观看| 黄色成人av在线| 一色屋精品视频免费看| 韩日午夜在线资源一区二区| 国产小视频国产精品| 国产伦精品一区二区三区| 国产精品国产成人国产三级| 欧美深夜福利| 欧美午夜精品理论片a级按摩| 欧美黄色小视频| 欧美大片在线观看一区二区| 欧美激情第1页| 欧美精品久久久久a| 欧美激情亚洲另类| 欧美日韩国产综合网| 欧美日韩国产小视频在线观看| 欧美激情亚洲综合一区| 欧美区在线观看| 欧美日韩一二三区| 国产精品多人| 国产老肥熟一区二区三区| 国产一区二区欧美日韩| 激情综合五月天| 亚洲欧洲日韩综合二区| 亚洲黄网站黄| 亚洲美女毛片| 亚洲欧美在线看| 久久久国产成人精品| 欧美日韩精品免费| 久久精品综合网| 国产一区二区久久久| 久久久精品动漫| 91久久一区二区| 欧美成人一区二区三区在线观看 | 欧美一级在线视频| 国产伦精品一区二区三区照片91| 久久久九九九九| 欧美成人午夜免费视在线看片| 亚洲男人第一网站| 亚洲一区二区欧美| 亚洲精品日本| 亚洲精品一区二区三区四区高清 | 国产一区二区三区av电影| 亚洲电影免费观看高清完整版在线观看 | 亚洲精选在线| 久久青草欧美一区二区三区| 一本久久综合亚洲鲁鲁| 免费看精品久久片| 久久亚洲综合| 免费黄网站欧美| 亚洲电影网站| 亚洲福利视频专区| 日韩视频在线你懂得| 日韩网站免费观看| 99国产精品99久久久久久粉嫩|