📄 f_otherfun.c
字号:
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <time.h>/*字符转换*/unsigned char *Convert8859( unsigned char * str ){ int i; int len = strlen( (char*) str ); unsigned char * p = str; unsigned char * p2 = str; unsigned char a, b; do { if ( (*p>>7) == 0x01 ) *p2 = (((*p)<<6)|(*(++p))); else *p2 = *p; p++; p2++; } while ( (p-str+1)<=len ); *p2 = 0x0; return ( str );}//1:注释行 2:主菜单项 3:子菜单项 4:无效行int LineIsWhich(char* LineStr){ switch(LineStr[0]) { case '#': return 1; break; case '[': return 2; break; default: return 4; break; }}/*拷贝srcstr中从begin_pos开始到end_pos结束的所有字符*/void strnmcpy(char* deststr,char* srcstr,int begin_pos,int end_pos){ int pstr,dstr=0; for(pstr=begin_pos;pstr<=end_pos;pstr++) { if (srcstr[pstr]>'\n' || srcstr[pstr]<'\n') { deststr[dstr]=srcstr[pstr]; dstr++; } else break; } }/*获取20010516格式的时间*/void gettime(char string[9]){ struct tm *ptime; char s[9]; time_t l; l=time(NULL); ptime=localtime(&l); sprintf(s,"%4d%02d%02d",1900+ptime->tm_year,1+ptime->tm_mon,ptime->tm_mday); strcpy(string,s);}int char_num( char *str, char ch ){ char *lp, *cp; int num = 0; if ( str==NULL ) return -1; lp = str; //strchr是寻找ch在lp中第一次出现的位置. while ( (cp=strchr(lp, ch)) != NULL ) { ++num; lp = cp + 1; } return num;}//将"hello|word|internet|shang|"字符按照'|'分割char** strsplit( char *str, char deli, int *spnum ){ char **retval, *lp=str, *cp; int num=0, i, len; if ( str == NULL ) { *spnum = 0; return NULL; } if ( strlen(str) == 0 ) { *spnum = 0; return NULL; } *spnum = num = char_num(str, deli) + 1; retval = (char **)malloc( num * sizeof(char*) ); for ( i=0 ; i<num ; ++i ) { cp = strchr( lp, deli ); if ( cp == NULL ) len = strlen( lp ); else len = cp - lp; retval[i] = (char *)malloc( len + 1 ); strncpy( retval[i], lp, len ); retval[i][len] = '\0'; lp = cp + 1; } return retval;}/* * 按分隔符取串中的项 * 输入: 源串 * 分隔符 * 当前位置 * 输出: * 返回: * NULL - 没有项数 * 指针 - 指向项目内容区 */char * StrItemGetByDelimit( unsigned char* str, char* delimit, int* pos ){ char * p; char * item; int item_len; if ( * pos == strlen( ( char * ) str ) ) return ( NULL ); p = (char *)strstr( (char *)&str[ * pos ], delimit ); if ( p != NULL ) { item_len = p - (char *)&str[ * pos ]; item = malloc( item_len + 1 ); memset( item, 0, item_len + 1 ); memcpy( item, &str[ * pos ], item_len ); * pos = * pos + item_len + strlen( delimit ); } else if ( strlen( (char *)&str[ * pos ] ) > 0 ) { item_len = strlen( (char *)&str[ * pos ] ); item = malloc( item_len + 1 ); memset( item, 0, item_len + 1 ); memcpy( item, &str[ * pos ], item_len ); * pos = * pos + item_len; } else return ( NULL ); return ( item );}/* * 按分隔符过滤串取其中的项 * 输入: 源串 * 分隔符 * 当前位置 * 输出: * 返回: * NULL - 没有项数 * 指针 - 指向项目内容区 */unsigned char * StrItemCutByDelimit( unsigned char * str, char * delimit, int * pos ){ int i; unsigned char * p1, *p2; unsigned char * item; int item_len; int dlmt_len; if ( * pos == strlen( (char *)str ) ) return ( NULL ); p1 = &str[ * pos ]; p2 = p1; dlmt_len = strlen( delimit ); while ( * p1 ) { for ( i = 0; i < dlmt_len; i ++ ) if ( delimit[ i ] == ( * p1 ) ) break; if ( i >= dlmt_len ) { p2 = p1; while( * p1 ) { for ( i = 0; i < dlmt_len; i++ ) if ( delimit[ i ] == ( * p1 ) ) break; if ( i < dlmt_len ) { item = malloc( p1 - p2 + 1 ); memcpy( item, p2, p1 - p2 ); item[ p1 - p2 ] = 0; (* pos) += ( p1 - &str[*pos] ); return( item ); } p1 ++; } if ( p1 - p2 > 0 ) { item = malloc( p1 - p2 + 1 ); memcpy( item, p2, p1 - p2 ); item[ p1 - p2 ] = 0; (* pos) += ( p1 - &str[*pos] ); return( item ); } } p1 ++; } if ( p1 - p2 > 0 ) { item = malloc( p1 - p2 + 1 ); memcpy( item, p2, p1 - p2 ); item[ p1 - p2 ] = 0; (* pos) += ( p1 - &str[*pos] ); return( item ); } return ( NULL );}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -