VC常用的函数(原创)转载需加地址

 

ContractedBlock.gif ExpandedBlockStart.gif Code
///
//
// 函数名       : trim
// 功能描述     : 去空格
// 参数         : char *szStr [in][out]
// 返回值       : 去空格后的字符串 
//
///
char * trim(char *szStr)
{
    
char *= NULL;
    p 
= szStr;
    
while ( *== ' '|| *== '\r' || *== '\n' )
    {
        p
++;
    }
    strcpy(szStr,p);
    p 
= szStr+strlen(szStr)-1;
    
while (*== ' ' || *== '\r' || *== '\n' ) 
    {
        
*p=0;
        p
--;
    }
    
return szStr;
}

///
//
// 函数名       : isNumber
// 功能描述     : 判断是不是号码
// 参数         : char *pszIn
// 返回值       : bool
//
///

bool isNumber(char *pszIn)
{
    
return strspn(pszIn,"0123456789")==strlen(pszIn)?true:false;  //strspn()从参数s 字符串的开头计算连续的字符,而这些字符都完全是accept 所指字符串中的//字符。简单的说,若strspn()返回的数值为n,则代表字符串s 开头连续有n 个字符都是属于字符串accept内的字符
}


void writeToLog(char *pszAppID,int nFlag,char *pszLogPath,char *pszLog,)
{
    
char szLogFile[256]={0};
    
char szTokens[]          = "/\\";
    
char *lpToken            = NULL;
    
char sName[256]          = { 0 };
    
char soldName[256]       = { 0 }; 
    
char szLogPath[256]         = { 0 };
    
char szBuffer[1024*5]      = { 0 };
    
char szLogFileName[128]  = { 0 };
    va_list args;
    
try
    {
        
if ( pszLogPath != NULL )
        {
            strcpy ( szLogPath, pszLogPath );
            
if ( access ( szLogPath, 0 ) == -1 )
            {
                strcpy ( soldName, szLogPath );        
                lpToken 
= strtok( soldName, szTokens );
                
while( lpToken != NULL )
                {
                    strcat ( sName, lpToken );
                    lpToken 
= strtok ( NULL, szTokens );// Get next token:
                    if( access ( sName, 0 ) == -1 )
                    {
                        mkdir(sName);
                    }
                    strcat(sName,
"\\");
                }
            }
        }
        va_start(args, pszLog);
        vsprintf(szBuffer, pszLog, args);
        
char szTime[128]={0};
        time_t tv;
        time ( 
&tv );
        
struct tm *t;
        t 
= localtime( &tv );
        
if( nFlag == 0 )
        {
            sprintf ( szTime, 
"%s_%.4d.%.2d.%.2d_err.log",pszAppID,t->tm_year+1900,t->tm_mon+1,t->tm_mday);
        }
        
else if(nFlag == 1 )
        {
            sprintf ( szTime, 
"%s_%.4d.%.2d.%.2d_report.log",pszAppID,t->tm_year+1900,t->tm_mon+1,t->tm_mday);
        }
        
else
        {
            sprintf ( szTime, 
"%s_%.4d.%.2d.%.2d.log",pszAppID,t->tm_year+1900,t->tm_mon+1,t->tm_mday);
        }
        
        trim(szBuffer);
        strcat(szBuffer,
"\n");
        sprintf (szLogFileName,
"%s%s",szLogPath,szTime);
        FILE
* fp = fopen ( szLogFileName, "a+" );
        
if( fp )
        {
            time ( 
&tv );
            t 
= localtime( &tv );
            memset(szTime,
0,128);
            sprintf ( szTime, 
"%.4d-%.2d-%.2d %.2d:%.2d:%.2d\n",t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);
            fwrite ( szTime, strlen(szTime), 
1, fp );
            fwrite ( szBuffer, strlen(szBuffer), 
1, fp );
            fclose ( fp );
        }
        va_end ( args );
    }
    
catch(char *)
    {
        
throw "写日志失败";
    }    
}


// 字符串替换函数.
// 能替换所有的要替换的字符串,被替换的字符串和替换的字符串不一定一样长.
// pInput - 输入字符串.
// pOutput - 输出字符串, 要保证足够的空间可以存储替换后的字符串.
// pSrc - 要被替换的子字符串, 比如%user%
// pDst - 要替换成的字符串, 比如user1
// 注意:以上的字符串均要以'\0'结尾.
void replaceAll(char *pInput, char *pOutput, char *pSrc, char *pDst)
{
    
char    *pi, *po, *p;
    
int     nSrcLen, nDstLen, nLen;

    pi 
= pInput;    
    po 
= pOutput;
    nSrcLen 
= strlen(pSrc);
    nDstLen 
= strlen(pDst);   
    p 
= strstr(pi, pSrc);   //从字符串pi中寻找pSrc第一次出现的位置
    if(p)
    {
        
while(p)
        {
            nLen 
= (int)(p - pi);
            memcpy(po, pi, nLen);
            memcpy(po 
+ nLen, pDst, nDstLen);
            pi 
= p + nSrcLen;
            po 
= po + nLen + nDstLen;
            p 
= strstr(pi, pSrc);
        }
        strcpy(po, pi);
    }
    
else
    {
        strcpy(po, pi);
    }
}


char *   get_now_time(char *pbuf)
{
    time_t tt;
    
struct tm *now;
    time( 
&tt);
    now 
= localtime( &tt);
    sprintf( pbuf, 
"%04d-%02d-%02d %02d:%02d:%02d",
            now
->tm_year+1900,
            now
->tm_mon + 1,
            now
->tm_mday,
            now
->tm_hour,
            now
->tm_min,
            now
->tm_sec);
    
return pbuf;
}

char  *   get_format_time(char *pbuf,char *pformat)
{
    time_t tt;
    
struct tm *now;
    time( 
&tt);
    now 
= localtime( &tt);
    
if(!strcmp(pformat,"yyyymmddhhmmss"))
    sprintf( pbuf, 
"%04d%02d%02d%02d%02d%02d",
            now
->tm_year+1900,
            now
->tm_mon + 1,
            now
->tm_mday,
            now
->tm_hour,
            now
->tm_min,
            now
->tm_sec);
    
else
    sprintf( pbuf, 
"%04d-%02d-%02d %02d:%02d:%02d",
            now
->tm_year+1900,
            now
->tm_mon + 1,
            now
->tm_mday,
            now
->tm_hour,
            now
->tm_min,
            now
->tm_sec);
    
return pbuf;
}


void   split(char *pbuf,char *psplit,char *p[],int &nDisNum)
{
    
char *pPos    = NULL;
    
char *pSrc    = pbuf;
    
int   i=0;
    
if ( pbuf == NULL || psplit == NULL)
    {
        
return;
    }
    pPos 
= strstr(pbuf,psplit);
    
while ( pPos != NULL )
    {
        
if ( pPos == pbuf )
        {
            strcpy(pSrc,pbuf
+strlen(psplit));
        }
        
else
        {
            
if(p[i] == NULL )
                
return;
            memcpy(p[i],pSrc,pPos
-pSrc);
            i
++;
        }
        pSrc 
= pPos+strlen(psplit);
        pPos 
= strstr(pSrc,psplit);    
    }
    strcpy(p[i],pSrc);
    nDisNum 
= i;
}

void debug(int nFlag,char *pbuf)
{
    
char szBuf[32= {0};
    
if(nFlag == 1)
    {
        printf(
"%s\n",get_now_time(szBuf));
        printf(
"%s\n",pbuf);
    }
}


int  get_total_miniute()
{
    
int nTotalMin;
    
int vmin,vhour,vday,vmon,vyear;
    time_t vNow;
    
struct tm *vtm;
    time( 
&vNow );
    vtm 
= localtime( &vNow );
    
    vmin 
= vtm->tm_min;
    vhour 
= vtm->tm_hour;
    vday  
= vtm->tm_mday;
    vmon 
= vtm->tm_mon+1;
    vyear 
= vtm->tm_year+1900-2005;
    nTotalMin 
= ((vyear*365+vday)*24+vhour)*60+vmin;
    
return nTotalMin;
}


///
// 函数     : getElementText
// 功能     : 获取xml文件的第nItemCount对的两个节点之间的值
// 参数     : char *pXmlContent[IN]     xml文件内容
// 参数     : char *pBeginElement[IN]   第一个节点的内容
// 参数     : char *pEndElement[IN]     第二个节点的内容
// 参数     : char *pElementValue[OUT]  两个节点之间的值
// 参数     : int  nItemCount[IN]       第几对节点之间的值
// 返回     : -1失败  0成功
// 描述     :
///
int getElementText( const char *pXmlContent, char *pBeginElement, char *pEndElement, char *pElementValue,int nItemCount)
{
    
char *pBPos  =  NULL;
    
char *pEPos  =  NULL;
    
char *pOldBPos = NULL;
    
char *pOldEPos = NULL;
    
char szBuffer[4096= { 0 };
    pBPos 
= strstr( const_cast<char*>(pXmlContent), pBeginElement );
    
if ( pBPos == NULL )
    {
        
return -1;
    }
    pEPos 
= strstr( const_cast<char*>(pXmlContent), pEndElement );
    
if ( pEPos == NULL )
    {
        
return -1;
    }
    
while ( nItemCount-- > 0 && pBPos != NULL && pEPos != NULL  )
    {
        memset( szBuffer,
0,sizeof(szBuffer) );
        memcpy( szBuffer, pBPos
+strlen(pBeginElement), trim(pEPos) - trim(pBPos)-strlen(pBeginElement) );
        pBPos 
= strstr( pEPos+strlen(pEndElement), pBeginElement );
        
if ( pBPos == NULL )
        {
            
break;
        }
        pEPos 
= strstr( pBPos+strlen(pBeginElement), pEndElement );
    }
    strcpy( pElementValue, szBuffer);
    
return 0;
}

///
// 函数     : getElementCount
// 功能     : 取得两个节点在xml文件中的总共对数
// 参数     : const char *pXmlContent[IN]
// 参数     : char *pBeginElement[IN]
// 参数     : char *pEndElement[IN]
// 返回     : 总共对数
// 描述     :
///
int getElementCount(const char *pXmlContent, char *pBeginElement, char *pEndElement)
{
    
char *pBPos  =  NULL;
    
char *pEPos  =  NULL;
    
int   nItemCount = 0;
    pBPos 
= strstr( const_cast<char*>(pXmlContent), pBeginElement );
    
if ( pBPos == NULL )
    {
        
return 0;
    }
    
while ( pBPos != NULL ) 
    {
        nItemCount
++;
        pEPos 
= strstr( pBPos+strlen(pBeginElement), pEndElement );
        pBPos 
= strstr( pEPos+strlen(pEndElement), pBeginElement );
    }
    
return nItemCount;
}

void ConvertGBKToUtf8(char *pszGBK,char *pszUtf8) 

    
int len=MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)pszGBK, -1, NULL,0); 
    unsigned 
short * wszUtf8 = new unsigned short[len+1]; 
    memset(wszUtf8, 
0, len * 2 + 2); 
    MultiByteToWideChar(CP_ACP, 
0, (LPCTSTR)pszGBK, -1, (LPWSTR)wszUtf8, len); 
    len 
= WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)wszUtf8, -1, NULL, 0, NULL, NULL); 
    
char *szUtf8=new char[len + 1]; 
    memset(szUtf8, 
0, len + 1); 
    WideCharToMultiByte (CP_UTF8, 
0, (LPCWSTR)wszUtf8, -1, szUtf8, len, NULL,NULL); 
    strcpy( pszUtf8, szUtf8 );
    delete[] szUtf8; 
    delete[] wszUtf8; 
    szUtf8  
= NULL;
    wszUtf8 
= NULL;

}

void ConvertUtf8ToGBK(char *pszUtf8, char *pszGBK) 

    
int len=MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)pszUtf8, -1, NULL,0); 
    unsigned 
short * wszGBK = new unsigned short[len+1]; 
    memset(wszGBK, 
0, len * 2 + 2); 
    MultiByteToWideChar(CP_UTF8, 
0, (LPCTSTR)pszUtf8, -1, (LPWSTR)wszGBK, len); 
    len 
= WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)wszGBK, -1, NULL, 0, NULL, NULL); 
    
char *szGBK=new char[len + 1]; 
    memset(szGBK, 
0, len + 1); 
    WideCharToMultiByte (CP_ACP, 
0, (LPCWSTR)wszGBK, -1, szGBK, len, NULL,NULL); 
    strcpy( pszGBK, szGBK );
    delete[] szGBK; 
    delete[] wszGBK;
    szGBK  
= NULL;
    wszGBK 
= NULL;

}

转载于:https://www.cnblogs.com/xianqingzh/archive/2009/04/01/1427303.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值