字符串处理函数(二):strchr

从一个字符串里面查找一个字符,返回第一个匹配处的指针,

第一次写,可能是这样的:

char* strchr(const char* str,char c){ assert(str!=NULL); while(*str&&*str++!=c); if(*str) return (char*)str; else return NULL; }

 

鉴于在写strcpy的一些经验,这个代码没什么大问题,只是还存在几个小问题,主要是由于考虑不周全造成的:

  1. 由于++操作的处理不对,这个函数不能返回正确的结果,比如从“Hello”中查找字符'e',那么返回的字符串应该是“ello”,但是按照上面的代码,在判断!str++!=c后,str执行++操作,指向的是该字符的后一个位置,因此需要稍作改动
  2. 如果要查找的字符为空结束符'/0'怎么办,上面的代码中并没有考虑

因此,修改后为:

 

char* strchr(const char* str,char c){ assert(str!=NULL); while(*str&&*str!=c) str++; if(*str||*str==c) return (char*)str; else return NULL; }

 

类似的,另外一个版本的查找函数strrchr为:

char* strrchr(const char* str,char c){ assert(str!=NULL); const char* tmp=NULL; while(*str){ if(*str==c) tmp=str; str++; } if(*str==c) return (char*)str; else return (char*)tmp; }

你可能感兴趣的:(c,null)