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

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

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

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

///////////////////////////////////////////////////////
// 參數是否有指示符-字典定義
///////////////////////////////////////////////////////
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;  //指示符值串,當hassymbol in (hsNone,hsHasValue)
                        
//的時候有效
}ARGNODE,*PARGNODE;

//////////////////////////////////////////////
// 所有參數的集合
//
//////////////////////////////////////////////
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ā)現
            {
                
if(!argv[i][1])
                {
                    
//printf("-發(fā)現,非法,跳過\n");
                    continue;
                }
                
                
if(argv[i+1]) //后續(xù)有參數
                {
                    
if(argv[i+1][0]=='-'//后續(xù)是一個新的參數
                    {
                        
//printf("發(fā)現僅有指示符的參數:%s\n",argv[i]+1);
                        pnode = append(hsOnly,argv[i]+1,NULL);
                        
                    }
                    
else //后續(xù)是當前參數的值
                    {                        
                        
//printf("發(fā)現有指示符而且?guī)抵档膮?%s-%s\n",argv[i]+1,argv[i+1]);
                        pnode = append(hsHasValue,argv[i]+1,argv[i+1]);
                        i
++;
                    }
                }
                
else //后續(xù)沒有了參數,那當前參數就是-h之類的東西
                {
                    
//printf("發(fā)現僅有指示符的參數:%s\n",argv[i]+1);
                    pnode = append(hsOnly,argv[i]+1,NULL);
                }
            }
            
else
            {
                
//printf("發(fā)現光禿禿的參數:%s\n",argv[i]);
                pnode = append(hsNone,NULL,argv[i]);
            }
        }
        
return 1;
    }
public:
    
//根據符號查找節(jié)點,用于查找 -a option || -a 這樣的參數節(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);
    
    
//根據值的前n位查找節(jié)點,用于查找 name=value這樣的節(jié)點
    PARGNODE getnode_n_value(const char* pszvalue);

public:
    
void print()
    {
        printf(
"++++++++++++開始打印各參數節(jié)點信息++++++++++++++\n");
        
int i=1;
        iterator iter 
= begin();
        
while(iter != end())
        {
            printf(
"第%d個參數節(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");
    
//////////////////////////////////////////////////////////////
    // 可能出現的參數形式:
    
//  a 沒有-指示   
    
//  -a 只有指示符
    
//  -a changjr 有指示符而且指示出了值
    
//  - 非法的-
    
//  -a changjr=erzi 自定義的參數值
    
//  changjr=er 直接是參數值
    //////////////////////////////////////////////////////////////
    // 具體的應用應該交給應用層自己去運用客戶傳入的參數和參數規(guī)則
    
//+合法性檢查.
    //////////////////////////////////////////////////////////////
    
    CArgNodeList  argnodelist;
    argnodelist.parser(argc,argv);
    argnodelist.print();
    
    
return 0;
}

posted on 2010-12-15 15:10 changup 閱讀(1744) 評論(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>
            久久精品国产一区二区电影 | 亚洲精品之草原avav久久| 欧美成人免费一级人片100| 亚洲天堂av图片| 欧美激情一区二区三区在线视频观看 | 午夜精品av| 欧美中文字幕在线| 欧美一区二区三区免费大片| 亚洲欧美日韩精品| 欧美亚洲色图校园春色| 一区二区三区高清| 欧美一区二区三区喷汁尤物| 亚洲激情欧美| 欧美h视频在线| 欧美电影免费观看大全| 亚洲日韩成人| 午夜日韩在线观看| 久久er精品视频| 鲁鲁狠狠狠7777一区二区| 亚洲一区二区三区精品动漫| 亚洲午夜精品久久久久久app| 一区二区精品| 老司机精品视频网站| 亚洲高清资源| 欧美一区二区三区在| 欧美日韩一区二区三区| 国产一区清纯| 日韩视频第一页| 午夜精品久久久久| 亚洲高清久久| 亚洲一区二区久久| 欧美日韩国产一区二区| 国产精品三级久久久久久电影| 国产欧美一区二区色老头| 影音先锋国产精品| 欧美一区二区三区在| 亚洲精选一区| 欧美电影免费观看网站| 亚洲东热激情| 模特精品裸拍一区| 久久久亚洲人| 黄色成人在线网站| 久久亚洲春色中文字幕久久久| 亚洲一区精品在线| 国产精品videossex久久发布| av成人黄色| 99视频有精品| 国产乱码精品一区二区三区不卡| 91久久精品日日躁夜夜躁国产| 欧美va天堂| 欧美美女喷水视频| 亚洲欧美视频| 久久永久免费| 欧美日韩视频免费播放| 99精品视频免费观看视频| 亚洲第一页在线| 美女在线一区二区| 亚洲一区网站| 久久只精品国产| 亚洲一区www| 免费一级欧美在线大片| 午夜激情综合网| 欧美激情小视频| 欧美中文日韩| 亚洲综合色在线| 欧美国产三区| 欧美黄色aa电影| 亚洲第一天堂无码专区| 久久福利影视| 亚洲欧美在线一区| 欧美日韩免费精品| 日韩亚洲欧美成人| 亚洲精选一区| 免费成人高清在线视频| 久久精品亚洲精品| 国产视频观看一区| 国产精品日日摸夜夜添夜夜av | 欧美色视频一区| 久久综合亚洲社区| 国产一区日韩二区欧美三区| 中文久久精品| 久久成人一区| 国产在线欧美| 欧美中文在线字幕| 另类春色校园亚洲| 韩国av一区二区三区在线观看| 欧美在线视频免费| 欧美激情亚洲国产| 亚洲你懂的在线视频| 亚洲综合首页| 国产农村妇女精品一二区| 欧美中文字幕在线观看| 老牛嫩草一区二区三区日本| 国产自产在线视频一区| 亚洲欧美网站| 亚洲韩国青草视频| 夜夜精品视频| 国产亚洲综合精品| 欧美成人亚洲成人日韩成人| 亚洲人成人一区二区三区| 一区二区三区不卡视频在线观看 | 91久久久久久久久| 亚洲曰本av电影| 亚洲欧洲日韩在线| 狠狠色丁香婷综合久久| 欧美久久电影| 免费成人av在线看| 性欧美1819性猛交| 夜夜狂射影院欧美极品| 欧美国产在线观看| 久久欧美肥婆一二区| 夜夜爽夜夜爽精品视频| 国产真实精品久久二三区| 欧美极品影院| 欧美精品免费看| 欧美激情一区二区三级高清视频| 欧美亚洲一区二区在线观看| 亚洲人永久免费| 亚洲午夜电影在线观看| 亚洲午夜在线观看| 99精品热视频| 日韩视频免费大全中文字幕| 亚洲美洲欧洲综合国产一区| 18成人免费观看视频| 狠狠色狠狠色综合日日tαg| 激情久久久久久久久久久久久久久久| 国产日韩欧美在线一区| 国产视频一区二区在线观看| 国产精品美女视频网站| 国产伦精品一区二区三区视频孕妇 | 午夜精品久久久久久| 久久免费视频网| 欧美黄在线观看| 国产日韩欧美三级| 亚洲精品影视| 久久久99爱| 99热这里只有成人精品国产| 亚洲欧美综合精品久久成人| 美日韩在线观看| 国语自产在线不卡| 亚洲综合视频网| 亚洲人成毛片在线播放女女| 亚洲伊人久久综合| 欧美精品三级在线观看| 国产日韩视频一区二区三区| 亚洲最新中文字幕| 欧美r片在线| 久久国产精品亚洲77777| 欧美日韩一区二区三区在线观看免| 欧美性久久久| 亚洲视屏在线播放| 亚洲一区二区精品| 国产精品国产一区二区| 国产精品99久久久久久久久久久久| 久热精品视频在线| 久久夜色精品国产| 亚洲国产精品va| 亚洲电影在线免费观看| 久久久久**毛片大全| 亚洲国产日韩一区| 日韩小视频在线观看| 老色鬼精品视频在线观看播放| 亚洲欧美www| 国内精品久久久久影院优| 麻豆精品在线视频| 欧美a级片网| 亚洲免费在线观看视频| 亚洲女优在线| 亚洲成色最大综合在线| 亚洲国产精品传媒在线观看| 欧美高清视频一区二区三区在线观看| 久久国产精品久久久久久久久久 | 欧美一区二区三区视频| 国产亚洲精品成人av久久ww| 欧美~级网站不卡| 国产精品久久久久久五月尺| 欧美一区二区高清| 国产精品久久久久久久久久免费 | 欧美婷婷六月丁香综合色| 亚洲专区一区二区三区| 亚洲亚洲精品在线观看| 亚洲日本视频| 久久www免费人成看片高清| 欧美日韩亚洲成人| 国产日韩一区在线| 亚洲一区www| 欧美在线视频二区| 国产精品激情| 亚洲视频日本| 久久婷婷国产综合国色天香| 久久精品二区三区| 欧美日韩亚洲三区| 日韩视频亚洲视频| 亚洲人成在线播放| 欧美精品v日韩精品v韩国精品v | 欧美激情一级片一区二区| 久久免费99精品久久久久久| 国产精品卡一卡二卡三| 亚洲图片欧洲图片av| 亚洲无限av看|