面试过程中,经常碰到的一类基础编程题是关于C中string.h中若干常用函数的实现,下面做个简单整理:
1. 【mystrlen】 ---- 求字串长度
size_t mystrlen (const char* str) {assert (str);size_t length=0;while ((*str++)!='\0')length++;return length;}
2. 【mystrcpy】 ----- 字符串拷贝
char* mystrcpy (char* des, const char* src) {assert (des && src);char* ptr=des;while ((*des++=*src++)!='\0');return ptr;}
3. 【mystrcat】 ---- 字符串连接
char* strcat (char* str1,const char* str2) {assert (str1 && str2);char* ptr=str1;while (*ptr!='\0')ptr++;while ((*ptr++=*str2++)!='\0');return str1;}
4. 【mystrcmp】---- 字符串比较
int mystrcmp (const char* s1, const char* s2) {assert (s1 && s2);while (*s1&&*s2&&(*s1==*s2))s1++,s2++;return *s2-*s1;}
5. 【mystrchr】 ----- 查找字符
char* mystrchr (const char* str, char c) {assert (str);char *ptr=(char*)str;while (*ptr!='\0'&&*ptr!=c)ptr++;return *ptr==c ? ptr : NULL;}
6. 【mystrstr】 ---- 查找子串
char* mystrstr (const char* str, const char* substr) {assert (str&&substr);size_t len1=0,len2=0,pos=0;while (*(str+len1)!='\0') len1++;while (*(substr+len2)!='\0') len2++;if (len2>len1) return NULL;while (pos++<len1-len2) {int ipos=0;while ((ipos++<len2)&&(*(str+pos+ipos)==*(substr+ipos)));if (ipos == len2)return (char*)(str+pos);}return NULL;}