今天又写了个函数,查找字符串首次出现位置,以此作为记录:
/* {{{ 查找字符串首次出现的位置,没有找到返回 -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;
}
/* }}} */