今天又写了个函数,查找字符串首次出现位置,以此作为记录:
/* {{{ 查找字符串首次出现的位置,没有找到返回 -1,两个字符串相等返回 0 在GCC下使用C99: int strpos(const char *haystack,const char *needle, _Bool ignorecase = 0) _Bool ignorecase =1 忽略大小写 时间:2012-08-17 By Dewei */ int strpos(const char *haystack,const char *needle, _Bool ignorecase = 0) { register unsigned char c, needc; unsigned char const *from, *end; int len = strlen(haystack); int needlen = strlen(needle); from = (unsigned char *)haystack; end = (unsigned char *)haystack + len; const char *findreset = needle; for (int i = 0; from < end; ++i) { c = *from++; needc = *needle; if (ignorecase) { if (c >= 65 && c < 97) c += 32; if (needc >= 65 && needc < 97) needc += 32; } if(c == needc) { ++needle; if(*needle == '\0') { if (len == needlen) return 0; else return i - needlen+1; } } else { if(*needle == '\0' && needlen > 0) return i - needlen +1; needle = findreset; } } return -1; } /* }}} */