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

高性能服務(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é)點(diǎn),用于查找 -a option || -a 這樣的參數(shù)節(jié)點(diǎn)
    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é)點(diǎn),用于查找 option 這樣的節(jié)點(diǎn)用
    PARGNODE getnode_value(const char* pszvalue);
    
    
//根據(jù)值的前n位查找節(jié)點(diǎn),用于查找 name=value這樣的節(jié)點(diǎn)
    PARGNODE getnode_n_value(const char* pszvalue);

public:
    
void print()
    {
        printf(
"++++++++++++開始打印各參數(shù)節(jié)點(diǎn)信息++++++++++++++\n");
        
int i=1;
        iterator iter 
= begin();
        
while(iter != end())
        {
            printf(
"第%d個參數(shù)節(jié)點(diǎn):\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)用層自己去運(yùn)用客戶傳入的參數(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>
            玖玖玖国产精品| 在线视频欧美精品| 欧美一区二区三区四区在线观看地址| 国产精品超碰97尤物18| 亚洲永久在线观看| 亚洲欧美日本另类| 黄色日韩网站| 亚洲精品五月天| 国产精品毛片a∨一区二区三区| 午夜综合激情| 久久综合色婷婷| 宅男精品视频| 欧美有码视频| 99精品福利视频| 欧美一乱一性一交一视频| 亚洲国产二区| 亚洲欧美日韩一区在线观看| 永久555www成人免费| 日韩一二三在线视频播| 国产在线精品一区二区中文| 亚洲高清精品中出| 国产精品免费一区二区三区观看| 久久婷婷av| 国产精品国产三级国产专播精品人| 欧美在线不卡视频| 欧美精品播放| 久久野战av| 国产精品视频yy9299一区| 裸体一区二区| 国产精品久久一区二区三区| 亚洲成色精品| 黑人极品videos精品欧美裸| 日韩视频在线观看一区二区| 在线免费观看欧美| 亚洲欧美综合一区| 在线综合亚洲| 欧美精品日韩三级| 欧美成人四级电影| 国产日韩一区二区三区在线| 99re8这里有精品热视频免费| 尤物yw午夜国产精品视频明星| 在线综合亚洲欧美在线视频| 亚洲日本中文字幕免费在线不卡| 午夜综合激情| 性久久久久久久| 国产精品成人观看视频免费| 亚洲激情国产| 亚洲看片网站| 欧美大片在线观看一区二区| 麻豆乱码国产一区二区三区| 国产手机视频精品| 先锋资源久久| 久久福利电影| 99精品欧美一区二区三区| 国产一区二区久久| 亚洲永久免费av| 亚洲欧美日韩在线不卡| 欧美日韩中文字幕日韩欧美| 最新成人在线| 99精品视频免费观看视频| 欧美插天视频在线播放| 欧美激情乱人伦| 亚洲精品视频一区| 欧美精品久久久久久久| 亚洲欧洲在线观看| 亚洲一区二区三区视频| 欧美午夜不卡在线观看免费 | 欧美成人资源网| 亚洲承认在线| 欧美激情亚洲另类| 亚洲美女色禁图| 亚洲免费视频一区二区| 国产精品最新自拍| 久久国产婷婷国产香蕉| 欧美sm极限捆绑bd| 一本一本a久久| 国产精品免费一区豆花| 久久本道综合色狠狠五月| 欧美成人精品激情在线观看| 亚洲精品国产精品国自产观看| 欧美人妖在线观看| 亚洲免费一在线| 玖玖精品视频| 99视频在线精品国自产拍免费观看| 欧美日韩美女| 欧美在线首页| 91久久黄色| 久久精品国产欧美亚洲人人爽| 亚洲成人在线视频播放| 欧美日韩国产成人| 欧美影院成年免费版| 亚洲激情午夜| 欧美怡红院视频一区二区三区| 黄色成人av网| 国产精品jizz在线观看美国| 欧美自拍偷拍| 在线视频亚洲欧美| 女仆av观看一区| 先锋影音国产一区| 日韩午夜激情电影| 国产亚洲制服色| 欧美久久久久| 久久婷婷人人澡人人喊人人爽| 一本色道久久综合亚洲精品婷婷| 久久只精品国产| 亚洲欧美电影院| 亚洲日本在线观看| 国产一区二区在线免费观看| 欧美日本中文| 美女视频黄a大片欧美| 亚洲自拍偷拍一区| 亚洲精品欧美一区二区三区| 久久亚洲精品一区| 欧美一区二区精品久久911| 日韩视频免费| 亚洲人在线视频| 激情视频一区二区| 国产一区二区av| 国产女主播一区二区| 欧美三日本三级少妇三2023| 欧美.www| 美女黄网久久| 亚洲在线一区二区三区| 狠狠爱www人成狠狠爱综合网| 欧美激情一区二区三区高清视频 | 亚洲国产高清aⅴ视频| 久久久国产精品一区二区三区| 亚洲在线成人精品| 一区二区不卡在线视频 午夜欧美不卡'| 韩国精品一区二区三区| 国产热re99久久6国产精品| 国产精品国产a级| 欧美视频一区二| 欧美丝袜一区二区| 国产精品家庭影院| 国产精品久久久久久久久久免费| 欧美激情国产日韩| 欧美激情亚洲一区| 欧美精品三级日韩久久| 欧美人妖另类| 欧美日韩在线视频首页| 国产精品va在线播放| 欧美无乱码久久久免费午夜一区| 欧美日韩一区在线播放| 欧美性理论片在线观看片免费| 欧美午夜寂寞影院| 国产精品任我爽爆在线播放| 国产精品久久久久久久久婷婷 | 亚洲综合首页| 性欧美18~19sex高清播放| 欧美一区二区精品在线| 久久久久亚洲综合| 欧美福利一区| 亚洲伦理在线观看| 亚洲一级网站| 久久精品免费观看| 欧美成人中文字幕| 国产精品久久久999| 国产视频在线观看一区| 亚洲成人在线网| 中日韩午夜理伦电影免费| 亚洲女同在线| 久久深夜福利免费观看| 亚洲国产高清一区| 亚洲免费一在线| 久久全国免费视频| 欧美三区在线视频| 狠狠色综合色区| 一区二区三欧美| 久久久噜噜噜久久久| 亚洲啪啪91| 欧美一区二区精品在线| 欧美搞黄网站| 国产一区二区三区高清播放| 亚洲日本乱码在线观看| 欧美一级成年大片在线观看| 欧美大片在线观看一区| 亚洲一区二区精品在线观看| 久久免费视频网站| 国产精品天天摸av网| 亚洲美女网站| 久久免费视频这里只有精品| 亚洲精品乱码久久久久久久久| 亚洲欧美日韩精品久久久| 欧美精品免费视频| 伊人久久噜噜噜躁狠狠躁| 亚洲一卡二卡三卡四卡五卡| 蜜桃视频一区| 亚洲欧美中文日韩在线| 欧美日本中文字幕| 91久久精品www人人做人人爽 | 亚洲日本aⅴ片在线观看香蕉| 欧美一区二区免费观在线| 亚洲激情欧美激情| 久久久综合香蕉尹人综合网| 国产精品激情av在线播放| 亚洲精品一区二| 欧美凹凸一区二区三区视频| 午夜精品久久久久久99热| 欧美视频日韩视频在线观看|