一、strcpy
char *mystrcpy(char *str1,char *str2){
if(str1==NULL || str2==NULL){
return NULL;
}
char *temp=str1;
while(*str2!='\0'){
*str1=*str2;
str1++;
str2++;
}
*str1='\0';
return temp;
}
int main(){
char str1[]=" ";
char str2[]="ad";
mystrcpy(str1,str2);
return 0;
}
二、strlen
int mystrlen(const char *str){
if(str==NULL){
return 0;
}
int len = 0;
while (*str != '\0')
{
len++;
str++;
}
return len;
}
三、strcat(拼接)
//手写strcat
char *mystrcat(char *str1,char *str2)
{
if(str1==nullptr || str2==nullptr)
{
return nullptr;
}
char *temp=str1;
while(*str1!='\0')
{
str1++;
}
while(*str2!='\0')
{
*str1=*str2;
str1++;
str2++;
}
*str1='\0';
return temp;
}
四、strcmp
//手写strcmp
int mystrcmp(char *str1, char *str2)
{
assert(str1 != nullptr && str2 != nullptr);
int ret = 0;
while (!(ret = *(unsigned char *)str1 - *(unsigned char *)str2) && *str1 != '\0')
{
str1++;
str2++;
}
if (ret > 0)
{
return 1;
}
else if (ret < 0)
{
return -1;
}
return 0;
}
五、strstr
用法:
strstr()函数用来检索子串在字符串中首次出现的位置,其原型为:
char *strstr( char *str, char * substr );
【参数说明】str为要检索的字符串,substr为要检索的子串。
【返回值】返回字符串str中第一次出现子串substr的地址;如果没有检索到子串,则返回NULL。
//手写strstr
int mystrstr(char *str, char *substr)
{
if (str == nullptr || substr == nullptr)
{
return -1;
}
int str_len = strlen(str);
int substr_len = strlen(substr);
if (str_len < substr_len)
{
return -1;
}
int j;
for (int i = 0; i < str_len - substr_len; ++i)
{
for (j = 0; j < substr_len; ++j)
{
if (str[i + j] != substr[j])
{
break;
}
}
if (j == substr_len)
{
return i;
}
}
return -1;
}
六、memcpy()
//手写memcpy()函数
void *mymemcpy(void *str1, void *str2, size_t n)
{
if (str1 == nullptr || str2 == nullptr)
{
return nullptr;
}
char *temp1 = (char *)str1;
char *temp2 = (char *)str2;
while (n--)
{
*temp1 = *temp2;
temp1++;
temp2++;
}
return str1;
}