目录
1.strlen的使用和模拟实现
描述
C 库函数 size_t strlen(const char *str) 计算字符串 str 的长度,直到空结束字符,但不包括空结束字符
声明
size_t strlen(const char *str)参数
- str -- 要计算长度的字符串
返回值
该函数返回字符串的长度
使用:
#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = "hellow";
int len = 0;
len = strlen(arr);
printf("%d\n",len);
return 0;
}
模拟实现:
int my_strlen(int* arr)
{
int ret = 0;
while (*arr)
{
ret++;
arr++;
}
return ret;
}
int main()
{
int arr[10] = { 1,2,3,4,5 };
int ret = my_strlen(arr);
printf("%d\n", ret);
return 0;
}
2. strcpy的使用和模拟实现
描述
C 库函数 char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest。
需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况
声明
char *strcpy(char *dest, const char *src)参数
- dest -- 指向用于存储复制内容的目标数组
- src -- 要复制的字符串
返回值
该函数返回一个指向最终的目标字符串 dest 的指针
使用
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[] = {0};
char arr2[] = {0};
strcpy(arr1,"hellow");
strcpy(arr2,arr1);
printf("%s\n",arr2);
return 0;
}
模拟实现
char* my_strcpy(char* dest, char* res)
{
char* ret = dest;
assert(dest, res != NULL);
while (*dest++ = *res++)
{
;
}
return ret;
}
int main()
{
char arr1[] = "abcdef";
char arr2[10] = { 0 };
my_strcpy(arr2, arr1);
printf("%s\n%s\n", arr1, arr2);
return 0;
}
3. strcat的使用和模拟实现
描述
C 库函数 char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾
声明
char *strcat(char *dest, const char *src)参数
- dest -- 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串。
- src -- 指向要追加的字符串,该字符串不会覆盖目标字符串
返回值
该函数返回一个指向最终的目标字符串 dest 的指针
使用
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[100] = {0};
char arr2[] = {0};
strcpy(arr1,"hellow");
strcpy(arr2,"bro");
strcat(arr1,arr2);
return 0;
}
模拟实现
char* my_strcat(char* dest, const char* src)
{
assert(dest != NULL);
assert(src != NULL);
char* ret = dest;
while (*dest)
{
dest++;
}
while ((*dest++ = *src++))
{
;
}
return ret;
}
int main()
{
char arr1[] = "abcde";
char arr2[] = "fghij";
my_strcat(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
4. strcmp的使用和模拟实现
描述
C 库函数 int strcmp(const char *str1, const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较
声明
int strcmp(const char *str1, const char *str2)参数
- str1 -- 要进行比较的第一个字符串
- str2 -- 要进行比较的第二个字符串
返回值
该函数返回值如下:
- 如果返回值小于 0,则表示 str1 小于 str2
- 如果返回值大于 0,则表示 str1 大于 str2
- 如果返回值等于 0,则表示 str1 等于 str2
使用
#include <stdio.h>
#include <string.h>
int main ()
{
char str1[15];
char str2[15];
int ret;
strcpy(str1, "abcdef");
strcpy(str2, "ABCDEF");
ret = strcmp(str1, str2);
if(ret < 0)
{
printf("str1 小于 str2");
}
else if(ret > 0)
{
printf("str1 大于 str2");
}
else
{
printf("str1 等于 str2");
}
return(0);
}
模拟实现
int my_strcmp(char* arr1, char* arr2)
{
while (*arr1 == *arr2)
{
int ret = 0;
if (*arr1 > *arr2)
{
printf("+1");
break;
}
else
{
printf("-1");
break;
}
arr1++;
arr2++;
}
return 0;
}
int main()
{
char arr1[] = "abcdef";
char arr2[] = "abcdfe";
my_strcmp(arr1, arr2);
return 0;
}
5. strstr的使用和模拟实现
描述
C 库函数 char *strstr(const char *haystack, const char *needle) 在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 '\0'
声明
char *strstr(const char *haystack, const char *needle)参数
- haystack -- 要被检索的 C 字符串
- needle -- 在 haystack 字符串内要搜索的小字符串
返回值
该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null
使用
#include <stdio.h>
#include <string.h>
int main()
{
const char haystack[20] = "RUNOOB";
const char needle[10] = "NOOB";
char *ret;
ret = strstr(haystack, needle);
printf("子字符串是: %s\n", ret);
return(0);
}
模拟实现
char* my_strstr(const char* str1, const char* str2)
{
const char* cur = str1;
const char* s1 = NULL;
const char* s2 = NULL;
assert(str1 && str2);
if (*str2 == '\0')
{
return (char*)str1;
}
while (*cur)
{
s1 = cur;
s2 = str2;
while (*s1 == *s2)
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return (char*)cur;
}
cur++;
}
return NULL;
}
int main()
{
char arr1[] = "abbbcdef";
char arr2[] = "bbc";
char* ret = my_strstr(arr1, arr2);
if (ret != NULL)
printf("%s\n", ret);
else
printf("找不到\n");
return 0;
}