/ * * STRTOK alternative * INT * SPLIT (int Argc, char * argv [], char * string, char * delimiter) * Argc - maximum split token number * argv - save the Token address * String - to be split into token String * Delimiter - Dividend, NULL represents the default blank character * Return value: actual token number, this number may be larger than Argc, the string after Argv [Argc - 1] is unsearched * / # include
#define Bitmap (Name, Counts) / Unsigned Char Name [(Counts 7) / 8] #define Bitmap_Zero (Name) / Memset (Name, 0, Sizeof (Name)) # define bitmap_set (offset, name) / (Name) / (Name [(Offset) >> 3] | = 1 << ((Offset) & 7) #define Bitmap_isset (Offset, Name) / ((Name) [(Offset) >> 3] & (1 << ((Offset) ) & 7))))))
INTSPLIT (int Argc, Char * Argv [], Char * String, Unsigned Char * Delimiter) {Int RC, Flags, New_Flags; Unsigned Char v; Bitmap (Map, 256);
BitMap_Zero (Map); if (Delimiter) {While ((v = * delimiter ) {bitmap_set (v, map);}} else {for (RC = 0; RC <256; RC) {IF (Isspace RC)) {Bitmap_set (RC, MAP);}}}
Flags = 0; rc = 0; while ((v = * (unsigned char *) string) {new_flags = bitmap_isset (v, map)? 0: 1; if (new_flags! = flags) {if (flags) {if (argv && rc