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

高性能服務(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>
            一区二区三区三区在线| 久久永久免费| 欧美日韩美女在线| 中文无字幕一区二区三区| 午夜精品影院| 日韩网站免费观看| 亚洲大胆女人| 国产伦精品一区二区三区四区免费 | 亚洲片区在线| 欧美国产三区| 欧美日韩精品一区二区天天拍小说 | 国产亚洲激情在线| 老司机67194精品线观看| 久久av在线| 亚洲欧美日韩精品久久亚洲区 | 欧美mv日韩mv国产网站| 日韩小视频在线观看| 国产精品免费福利| 欧美一区二区三区另类| 久久久亚洲综合| 久久一区二区三区四区五区| 亚洲国产福利在线| 亚洲欧美日韩系列| 国产一区在线视频| 亚洲激情精品| 狠狠色综合网站久久久久久久| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲一区二区在线视频| 国产亚洲精品久久久| 国产日韩欧美中文| 国产精品成人v| 国产精品国码视频| 欧美裸体一区二区三区| 欧美精品www在线观看| 欧美日韩在线看| 国产欧美一区二区三区久久人妖| 国产日韩欧美高清| 99国产精品国产精品久久| 亚洲高清资源综合久久精品| 日韩视频一区二区| 久久精品国产亚洲一区二区三区| 欧美国产视频在线观看| 久久久久久香蕉网| 在线午夜精品自拍| 亚洲精品国产无天堂网2021| 亚洲淫性视频| 亚洲人成网站色ww在线| 欧美一区二区三区四区高清| 欧美黄色小视频| 亚洲视频一区在线观看| 亚洲欧洲综合| 亚洲一级二级| 国产精品进线69影院| 亚洲理伦电影| 一本久久综合亚洲鲁鲁| 国产精品一区视频网站| 欧美成人综合一区| 久久国产精品72免费观看| 日韩视频免费观看高清完整版| 久久久久久久久久久久久久一区| 日韩视频在线观看一区二区| 国产一区免费视频| 国产欧美日本一区二区三区| 麻豆久久婷婷| 老妇喷水一区二区三区| 欧美在线观看www| 久久久人成影片一区二区三区| 欧美日韩免费网站| 久久午夜国产精品| 国产一区二区视频在线观看| 先锋影音一区二区三区| 亚洲精品视频在线看| 国产精品视频yy9299一区| 免费亚洲一区| 欧美国产亚洲视频| 欧美精品www| 欧美三区在线视频| 国产精品一区久久| 极品少妇一区二区| 亚洲国内精品| 亚洲日本免费| 亚洲国语精品自产拍在线观看| 欧美成人dvd在线视频| 亚洲图片欧洲图片av| 日韩视频在线免费观看| 国产精品成人v| 久久久久国产一区二区三区| 亚洲国产精品成人精品| 亚洲在线观看| 夜夜嗨av一区二区三区网站四季av| 欧美一区91| 久久久久国产免费免费| 亚洲一区二区久久| 欧美日韩国产精品一区| 国产精品久久久久久久久免费| 欧美午夜在线观看| 国产欧美日韩综合一区在线播放 | 国模 一区 二区 三区| 国产免费成人在线视频| 欧美粗暴jizz性欧美20| 国产精品视区| 亚洲日本欧美| 狠狠色狠狠色综合日日小说| 一区二区久久久久久| 亚洲三级电影全部在线观看高清| 性刺激综合网| 性色av一区二区三区| 欧美视频日韩| 亚洲破处大片| 亚洲男人影院| 国产精品久久久久91| 宅男噜噜噜66一区二区| 中文在线资源观看视频网站免费不卡| 欧美激情一区| 日韩一级片网址| 亚洲一区二区三区在线| 国产精品国色综合久久| 亚洲国产天堂久久国产91| 欧美精品国产一区| 亚洲激情自拍| 一二三区精品福利视频| 欧美日韩精品三区| 99视频一区二区三区| 亚洲一区在线视频| 国产精品一区二区三区久久久| 亚洲欧美成人一区二区三区| 欧美一级一区| 国产精品久久一区主播| 最新中文字幕亚洲| 亚洲激情一区二区| 美女脱光内衣内裤视频久久网站| 久久久久久久久久码影片| 韩国一区二区三区在线观看| 久久久久久999| 亚洲国产成人精品女人久久久| 久久久久久久999| 国产伦精品一区二区三区视频黑人 | 欧美xxxx在线观看| 亚洲国产成人av在线| 欧美顶级大胆免费视频| 99re热这里只有精品视频| 欧美一级夜夜爽| 在线看片欧美| 欧美视频亚洲视频| 久久gogo国模裸体人体| 日韩午夜剧场| 久久久综合香蕉尹人综合网| 亚洲精品一区在线观看| 国产精品高潮视频| 在线视频欧美日韩| 美女主播精品视频一二三四| 亚洲视频一区在线观看| 国语自产偷拍精品视频偷 | 久久国产精品久久久久久电车| 欧美ab在线视频| 亚洲日本成人| 精品动漫3d一区二区三区| 欧美日韩国产一级片| 欧美一区网站| 99riav1国产精品视频| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲免费av网站| 韩国三级电影久久久久久| 亚洲午夜激情网站| 亚洲国产精品成人va在线观看| 欧美一区二区三区视频免费| 国产主播一区二区三区四区| 国产精品成人av性教育| 欧美成年人在线观看| 亚洲欧美资源在线| 亚洲黑丝一区二区| 免费成人av在线| 久久成人在线| 亚洲尤物影院| 欧美国产综合| 欧美激情一区二区三区| 久久精彩免费视频| 亚洲在线视频网站| 亚洲美女av网站| 亚洲成色777777女色窝| 麻豆国产精品一区二区三区| 亚洲精品视频一区| 99精品国产在热久久婷婷| 亚洲国产精品久久久久秋霞不卡 | 国产亚洲精品成人av久久ww| 久久青青草原一区二区| 美女图片一区二区| 久久精品中文| 欧美一区二区三区视频在线| 亚洲一区日韩| 亚洲免费视频在线观看| 亚洲一区二区精品在线观看| 亚洲第一区在线| 日韩视频国产视频| 亚洲精品一二三区| 亚洲精品一区二区三区蜜桃久 | 欧美日韩精品免费观看视频完整 | 亚洲专区免费| 亚洲亚洲精品三区日韩精品在线视频| 国产亚洲精品aa午夜观看|