字符串中取部分字符串拼装

#include "stdio.h"
#include <iostream>
#include<windows.h>
#include <winbase.h>


char tmpkey[4096] = {0};
char* findkey(char* str)
{
    memset(tmpkey,0,4096);
    int c = 0;
    char* p = strstr(str,"\"time\"");
    char* pe = str;
    if(p)
    {
        p += 7;
        pe = strstr(p,"\"");
        strncat(tmpkey,p,pe-p-1);
    }
    p = strstr(pe,"\"ip\"");
    if(p)
    {
        p += 5;
        pe = strstr(p,",\"");
        if(!pe)
            pe = strstr(p,"\}");
        strncat(tmpkey,p,pe-p);
    }
    p = strstr(pe,"\"vpnip\"");
    if(p)
    {
        p += 8;
        pe = strstr(p,",\"");
        if(!pe)
            pe = strstr(p,"\}");
        strncat(tmpkey,p,pe-p);
    }
    return tmpkey;
}
char* findkey2(char* str)
{
    memset(tmpkey,0,4096);
    char ch = 0;
    char type[20] = {0};
    char *p = 0;
    int i =0,j=0;
    ch = *str;
    while (ch != 0)
    {
        if(ch == '\"')
        {
            ch = *++str;
            i = 0;
            while(ch != '\"')
            {
                if(i > 20)
                    continue;
                type[i++] = ch;
                ch = *++str;
            }

            type[i] = 0;   
            if(strcmp(type,"time") == 0)
            {
                str += 2;
                ch = *str;
                p = str;
                j = 0;
                while((ch != ',')&&(ch != '}')&&(ch != '\"'))
                {
                    ch = *++str;
                    j++;
                }
                strncat(tmpkey,p,j);
            }
            else if(strcmp(type,"ip") == 0)
            {
                str += 2;
                ch = *str;
                p = str;
                j = 0;
                while((ch != ',')&&(ch != '}')&&(ch != '\"'))
                {
                    ch = *++str;
                    j++;
                }
                strncat(tmpkey,p,j);
            }
            else if(strcmp(type,"vpnip") == 0)
            {
                str += 2;
                ch = *str;
                p = str;
                j = 0;
                while((ch != ',')&&(ch != '}')&&(ch != '\"'))
                {
                    ch = *++str;
                    j++;
                }
                strncat(tmpkey,p,j);
            }
        }
        ch = *++str;
    }
    return tmpkey;
}
int _tmain(int argc, _TCHAR* argv[])
{

SYSTEMTIME sys;

GetLocalTime( &sys );

printf( "%d/%d/%d %d:%d:%d.%d 星期%d\n"
,sys.wYear,sys.wMonth,sys.wDay
,sys.wHour,sys.wMinute,sys.wSecond,sys.wMilliseconds
,sys.wDayOfWeek);
for(int i =0;i<1000000;i++)
{
findkey(str);
findkey(str1);
findkey(str2);
}
GetLocalTime( &sys );

printf( "%d/%d/%d %d:%d:%d.%d 星期%d\n"

,sys.wYear,sys.wMonth,sys.wDay

,sys.wHour,sys.wMinute,sys.wSecond,sys.wMilliseconds

,sys.wDayOfWeek);


for(int i =0;i<1000000;i++)
{
findkey2(str);
findkey2(str1);
findkey2(str2);
}
GetLocalTime( &sys );

printf( "%d/%d/%d %d:%d:%d.%d 星期%d\n"

,sys.wYear,sys.wMonth,sys.wDay

,sys.wHour,sys.wMinute,sys.wSecond,sys.wMilliseconds

,sys.wDayOfWeek);

}

  

  经测算 findkey比findkey2效率高

posted @ 2018-07-03 16:47  微风v5  阅读(238)  评论(0编辑  收藏  举报