// go searching through a single dir for a name match. use MyStrcmp() // for case-insensitive compare. use '/' to separate directory components // if more after '/' and we matched a dir, recurse down there // RETURN: ptr to dir entry if found, else 0 // once any dir matched, don't return name which dir was matched dir_t *FindNameSub( char *name, dir_t *this_dir ) { dir_t *dir_p = this_dir; int len = MyStrlen( name ); char *p; // if name ends in '/', chances are we need to decend into the dir if( ( p = strchr( name, '/' ) ) != NULL) len = p - name; for( ; dir_p->name; dir_p++ ) { if( 1 == MyStrcmp( name, dir_p->name, len ) ) { if( p && p[1] != 0 ) { // user is trying for a sub-dir. if there are more components, make sure this // is a dir. if name ends with "/" we don't check. thus "hello.html/" is legal while( *p == '/' ) { p++; if( '\0' == *p ) return dir_p; // "/README/////" is OK } name = p; return FindNameSub( name, (dir_t *)dir_p->data ); } return dir_p; } } return NULL; // no match found }
int main() { char source[50] = {0xff}; char dest[50] = {0xff}; scanf("%s", source); scanf("%s", dest); printf("result:%d\n", MyStrcmp(source, dest)); return 0; }
void SetTriggerKeys (char *str) { int i; char strKey[2][30]; char *p; //首先来判断用户设置了几个热键,最多为2 p = str; i = 0; iTriggerKeyCount = 0; while (*p) { if (*p == ' ') { iTriggerKeyCount++; while (*p == ' ') p++; strcpy (strKey[1], p); break; } else strKey[0][i++] = *p++; } strKey[0][i] = '\0'; Trigger_Keys = (XIMTriggerKey *) malloc (sizeof (XIMTriggerKey) * (iTriggerKeyCount + 2)); for (i = 0; i <= (iTriggerKeyCount + 1); i++) { Trigger_Keys[i].keysym = 0; Trigger_Keys[i].modifier = 0; Trigger_Keys[i].modifier_mask = 0; } for (i = 0; i <= iTriggerKeyCount; i++) { if (MyStrcmp (strKey[i], "CTRL_")) { Trigger_Keys[i].modifier = Trigger_Keys[i].modifier | ControlMask; Trigger_Keys[i].modifier_mask = Trigger_Keys[i].modifier_mask | ControlMask; } else if (MyStrcmp (strKey[i], "SHIFT_")) { Trigger_Keys[i].modifier = Trigger_Keys[i].modifier | ShiftMask; Trigger_Keys[i].modifier_mask = Trigger_Keys[i].modifier_mask | ShiftMask; } else if (MyStrcmp (strKey[i], "ALT_")) { Trigger_Keys[i].modifier = Trigger_Keys[i].modifier | Mod1Mask; Trigger_Keys[i].modifier_mask = Trigger_Keys[i].modifier_mask | Mod1Mask; } else if (MyStrcmp (strKey[i], "SUPER_")) { Trigger_Keys[i].modifier = Trigger_Keys[i].modifier | Mod4Mask; Trigger_Keys[i].modifier_mask = Trigger_Keys[i].modifier_mask | Mod4Mask; } if (Trigger_Keys[i].modifier == 0) { Trigger_Keys[i].modifier = ControlMask; Trigger_Keys[i].modifier_mask = ControlMask; } p = strKey[i] + strlen (strKey[i]) - 1; while (*p != '_') { p--; if (p == strKey[i] || (p == strKey[i] + strlen (strKey[i]) - 1)) { Trigger_Keys = (XIMTriggerKey *) malloc (sizeof (XIMTriggerKey) * (iTriggerKeyCount + 2)); Trigger_Keys[i].keysym = XK_space; return; } } p++; if (strlen (p) == 1) Trigger_Keys[i].keysym = tolower (*p); else if (!strcasecmp (p, "LCTRL")) Trigger_Keys[i].keysym = XK_Control_L; else if (!strcasecmp (p, "RCTRL")) Trigger_Keys[i].keysym = XK_Control_R; else if (!strcasecmp (p, "LSHIFT")) Trigger_Keys[i].keysym = XK_Shift_L; else if (!strcasecmp (p, "RSHIFT")) Trigger_Keys[i].keysym = XK_Shift_R; else if (!strcasecmp (p, "LALT")) Trigger_Keys[i].keysym = XK_Alt_L; else if (!strcasecmp (p, "RALT")) Trigger_Keys[i].keysym = XK_Alt_R; else if (!strcasecmp (p, "LSUPER")) Trigger_Keys[i].keysym = XK_Super_L; else if (!strcasecmp (p, "RSUPER")) Trigger_Keys[i].keysym = XK_Super_R; else Trigger_Keys[i].keysym = XK_space; } }
int main(int argc, char *argv[]) { std::cout << MyStrcmp(argv[1], argv[2]) << std::endl; }