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

高性能服務(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>
            久久裸体艺术| 欧美电影电视剧在线观看| 国产精品一区二区你懂得| 欧美色区777第一页| 欧美人与禽猛交乱配视频| 欧美日韩在线不卡| 国产精品有限公司| 激情亚洲网站| 亚洲欧洲在线免费| 亚洲午夜小视频| 久久国产婷婷国产香蕉| 欧美高清视频在线播放| 亚洲精品乱码久久久久久| 日韩视频在线免费观看| 亚洲免费中文字幕| 久久综合中文色婷婷| 欧美日韩在线高清| 激情久久一区| 亚洲亚洲精品三区日韩精品在线视频| 欧美影院成年免费版| 欧美国产一区二区| 午夜免费日韩视频| 欧美激情网友自拍| 一本一道久久综合狠狠老精东影业| 亚洲一区bb| 久久一区二区三区四区五区| 欧美日韩精品一区二区在线播放 | 羞羞答答国产精品www一本 | 在线中文字幕不卡| 久久一区视频| 亚洲性视频网站| 欧美大秀在线观看| 伊人久久久大香线蕉综合直播| 亚洲精品在线观| 久久午夜视频| 亚洲一区二区视频| 欧美xx视频| 一区二区亚洲精品国产| 亚洲女ⅴideoshd黑人| 欧美国产另类| 欧美一级二级三级蜜桃| 国产精品v欧美精品v日本精品动漫| 亚洲第一精品夜夜躁人人爽| 欧美亚洲免费电影| 亚洲精品字幕| 欧美经典一区二区三区| 在线日本成人| 免费成人毛片| 午夜久久久久久| 欧美视频日韩| 亚洲性感美女99在线| 亚洲美女视频在线免费观看| 欧美在线999| 国产乱码精品一区二区三区av| 在线综合欧美| 日韩一级黄色av| 欧美日韩国产欧| 一区二区三区日韩欧美精品| 亚洲电影下载| 欧美激情综合亚洲一二区| 亚洲国产精品久久久久婷婷884| 久久久久久亚洲精品中文字幕| 亚洲伊人网站| 国产欧美精品一区二区三区介绍| 香蕉尹人综合在线观看| 亚洲欧美在线视频观看| 国产一区二区欧美| 免费观看在线综合色| 久热这里只精品99re8久| 亚洲激情第一页| 亚洲精品在线一区二区| 国产精品国产三级国产aⅴ浪潮| 亚洲永久精品国产| 欧美亚洲视频在线观看| 亚洲国产精品第一区二区三区| 欧美激情亚洲国产| 欧美日韩一区二区视频在线| 亚洲欧美在线x视频| 久久国产一二区| 亚洲久久成人| 亚洲综合国产精品| 在线看成人片| 9人人澡人人爽人人精品| 国产伦精品一区二区三区高清版 | 亚洲精品免费看| 欧美先锋影音| 久久香蕉国产线看观看av| 美女在线一区二区| 亚洲伊人第一页| 久久久久www| 一区二区三区久久| 性欧美18~19sex高清播放| 在线看片日韩| 在线视频欧美日韩| 一区在线免费观看| 妖精成人www高清在线观看| 国产亚洲精品久久久久久| 亚洲国产精品传媒在线观看 | 最新中文字幕亚洲| 99re热精品| 在线观看精品一区| 亚洲视频免费| 91久久久一线二线三线品牌| 亚洲免费在线视频一区 二区| 亚洲激精日韩激精欧美精品| 亚洲无人区一区| 亚洲裸体在线观看| 亚洲美女电影在线| 一区二区三区高清在线观看| 欧美日韩中文字幕精品| 另类av一区二区| 国产精品一区二区久久久久| 亚洲人成网站在线播| 国产日韩视频| 亚洲伊人久久综合| 一区二区三区免费看| 免费成人av| 美女视频一区免费观看| 国产精品呻吟| 亚洲视频一区在线观看| 日韩亚洲欧美综合| 毛片av中文字幕一区二区| 久久久国际精品| 国产精品一区二区三区免费观看| 亚洲国内精品| 日韩亚洲欧美中文三级| 欧美国产一区二区| 亚洲国产老妈| 亚洲日本理论电影| 欧美刺激性大交免费视频 | 夜夜嗨av一区二区三区四季av| 在线观看欧美视频| 久久九九精品99国产精品| 久久国内精品视频| 国产精品免费观看在线| 亚洲视频播放| 亚洲制服欧美中文字幕中文字幕| 欧美大片一区| 亚洲精品一区二区三区樱花| 亚洲乱码国产乱码精品精天堂| 农村妇女精品| 日韩亚洲国产精品| 午夜精品一区二区三区在线播放| 欧美午夜视频在线| 亚洲夜晚福利在线观看| 午夜精品婷婷| 国产亚洲欧美一级| 久久久久久久999| 免费试看一区| 亚洲美女免费精品视频在线观看| 欧美激情在线播放| 一个人看的www久久| 欧美一区二区高清| 尤物九九久久国产精品的特点| 久久婷婷丁香| 99视频在线精品国自产拍免费观看| 亚洲香蕉在线观看| 国产一区二区三区的电影| 美国十次了思思久久精品导航| 欧美激情国产精品| 亚洲一区二区三区四区五区午夜 | 国产精品一区免费观看| 久久国产精品久久久久久电车| 欧美va天堂| 亚洲一品av免费观看| 国产欧美一区二区三区另类精品| 欧美资源在线观看| 亚洲精品国产日韩| 久久精品国产一区二区三| 亚洲国内精品| 国产精一区二区三区| 麻豆freexxxx性91精品| 中日韩美女免费视频网址在线观看| 久久精品男女| 一区二区三区免费网站| 欧美日韩国产一区| 久久精品一区二区| 日韩视频在线观看免费| 国产精品综合色区在线观看| 美女视频黄 久久| 亚洲欧美日韩电影| 亚洲韩国日本中文字幕| 久久精品国产精品亚洲综合| 亚洲美女啪啪| 精品成人国产| 国产欧美精品一区二区三区介绍| 欧美成人四级电影| 久久丁香综合五月国产三级网站| 亚洲美女一区| 亚洲福利视频一区二区| 久久成人免费日本黄色| 中文欧美在线视频| 亚洲精品国产欧美| 一区二区视频在线观看| 国产日韩一区二区| 国产精品久久久久久久久借妻 | 亚洲欧洲综合另类在线| 国产精品青草久久久久福利99| 男人天堂欧美日韩| 久久精品首页|