C语言实现 strpos 查找字符串首次出现位置

今天又写了个函数,查找字符串首次出现位置,以此作为记录:

/* {{{ 查找字符串首次出现的位置,没有找到返回 -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;  
}  
/* }}} */

你可能感兴趣的:(字符串)