字符串中取部分字符串拼装
#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效率高

浙公网安备 33010602011771号