一、strlen函数,计算字符串长度的函数。它的的模拟实现有三种方式:
1、计数器
int my_strlen(char* str)
{
int count = 0;
while (*str!='\0')
{
count++;
*str++;
}
return count;
}
int main()
{
const char str[] = "abcdef";
int ret = my_strlen(str);
printf("%d\n", ret);
system("pause");
return 0;
}
2、指针
int my_strlen(const char* str)
{
const char* src = str;
while (*src != '\0')
{
*src++;
}
return src - str;
}
int main()
{
const char str[] = "abcdef";
int ret = my_strlen(str);
printf("%d\n", ret);
system("pause");
return 0;
}
3、递归
int my_strlen(char* str)
{
if (*str == '\0')
{
return 0;
}
else
{
return 1 + my_strlen(str + 1);
}
}
int main()
{
const char str[] = "abcdef";
int ret = my_strlen(str);
printf("%d\n", ret);
system("pause");
return 0;
}
二、strcpy函数,字符串拷贝函数,无长度限制,所以函数参数应该设置为两个。
#include<stdio.h>
#include<iostream>
#include<assert.h>
char my_strcpy(char* pdest, const char* psrc)
{
assert(pdest != NULL);
assert(psrc != NULL);
while (*pdest++ = *psrc++)
{
;
}
return *pdest;
}
int main()
{
char str[20] = "aaaaaaaa";
const char* p = "hello world";
my_strcpy(str, p);
printf("%s\n", str);
system("pause");
return 0;
}
三、strncpy字符串拷贝函数,有长度限制,所以函数参数应该设置为三个。
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
char *my_strncpy(char* dest, const char *src, size_t count)
{
assert(src != NULL);
char* strdest = dest;
while (count--)
{
*dest++ = *src++;
}
*dest = '\0';
return strdest;
}
int main()
{
char arr1[10] = { 0 };
char arr2[] = "hello world!";
char *ret = my_strncpy(arr1, arr2, 5);
printf("%s", ret);
system("pause");
return 0;
}
四、strcat函数,字符串追加函数,无长度限制。
#include<stdio.h>
#include<iostream>
#include<assert.h>
char my_strcat(char* pdest,const char* psrc)
{
assert(pdest);
assert(psrc);
while (*pdest)
{
*pdest++;
}
while (*psrc)
{
*pdest++ = *psrc++;
}
*pdest = '\0';
return *pdest;
}
int main()
{
char str[20] = "hello ";
const char* p = "word!";
my_strcat(str, p);
printf("%s\n", str);
system("pause");
return 0;
}
五、strncat函数,字符串追加函数,有长度限制。
#include <stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
char* my_strncat(char*str, const char*dest, int count)
{
assert(str != NULL);
assert(dest != NULL);
char *temp = str;
while (*str != '\0')
{
*str++;
}
while (count--)
{
*str++ = *dest++;
}
*str = '\n';
return temp;
}
int main()
{
char arr[10] = "abcdef";
my_strncat(arr, arr, 5);
printf("%s", arr);
system("pause");
return 0;
}
六、strcmp函数,字符串比较函数,无长度限制。
#include<stdio.h>
#include<iostream>
#include<assert.h>
int my_strcmp(const char* pdest, const char* psrc)
{
assert(pdest);
assert(psrc);
while (*(pdest) == *(psrc))
{
if ((*(pdest) == '\0') || (*(pdest) == '\0'))
{
return 0;
}
*pdest++;
*psrc++;
}
if (*pdest > *psrc)
{
return 1;
}
else
return -1;
}
int main()
{
const char* str1 = "abcdf";
const char* str2 = "abcdf";
int ret = my_strcmp(str1, str2);
if (ret > 0)
{
printf("str1>str2\n");
}
if (ret == 0)
{
printf("str1=str2\n");
}
if (ret < 0)
{
printf("str1<str2\n");
}
system("pause");
return 0;
}
七,strncmp字符串比较函数,有长度限制。
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<string.h>
int my_strncmp(const char *str, const char *dest, size_t count)
{
assert(str != NULL);
assert(dest != NULL);
while (*str&&*dest && (*str == *dest) && count--)
{
*str++;
*dest++;
}
return *str - *dest;
}
int main()
{
char arr1[] = "agfdshjk";
char arr2[] = "zxcvbnme";
char temp[5];
int result = my_strncmp(arr1, arr2, 5);
if (result > 0)
{
strcpy(temp, ">");
}
else if (result < 0)
strcpy(temp, "<");
else
strcpy(temp, "=");
}