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