c/c++面试题(3)strcat/strcmp/strlen/strcpy的实现

时间:2023-03-08 22:10:06

1.编写一个函数实现strlen以及strcpy函数.

strcpy函数.

后面的字符串拷贝到一个字符数组中,要求拷贝好的字符串在字符数组的首

地址,并且只拷贝到'\0'的位置.原型是

char* my_strcpy(char* dest[],const char* src);

  #include <stdio.h>
#include <assert.h>
char* my_strcpy(char *dest,const char* src)
{
assert(dest != NULL && src != NULL);
char* p = dest;
while(*src != '\0')
{
*p++ = *src++;
} return dest;
}
int my_strlen(const char* str)
{
int res = ;
if(NULL == str)
return -;
else
while(*str++ != '\0') //注意这里的'\0'和0是相同的.
res++;
return res;
}

这两个函数的实现主要是判断空指针,其他的注意细节就是strcpy不要改变第一个参数的指向,还有就是返回字符串的

首地址以实现级联式应用.

下面写一个简化版本的更好.

char* other_strcpy(char* dest,const char* src)
{
assert(dest != NULL && src != NULL);
char *p = dest;
while((*p++ = *src++) != '\0')
NULL;
return dest;
}

2.实现strcat和strcmp函数.

原型是:char* my_strcat(char* dest,const char* src);

int   my_strcmp(const char* s1,const char* s2);

  #include <stdio.h>
#include <assert.h>
int my_strcmp(const char* s1,const char* s2)
{
assert(s1 != NULL && s2 != NULL);
for(;*s1 == *s2;s1++,s2++);
if(*s1 == '\0' && *s2 == '\0')
return ;
return ((unsigned char)*s1 < (unsigned char)*s2 ? -: );
} char* my_strcat(char* s1,const char* s2)
{
assert(s1 != NULL && s2 != NULL);
char* dest = s1;
while(*dest != '\0')
dest++;
while(*dest++ = *s2++);
return s1;
}