strlen函数
strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。
模拟实现strlen函数
#include<stdio.h>
#include<assert.h>
int my_strlen(const char *str)
{
int count = 0;
assert(str != NULL);
while (*str != '\0')
{
str++;
count++;
}
return count;
}
int main()
{
int ret = 0;
char arr[10] = "abcdefgh";
ret = my_strlen(arr);
printf("%d\n", ret);
system("pause");
return 0;
}
C/C++函数,比较两个字符串
设这两个字符串为str1,str2,
若str1==str2,则返回零;
若str1<str2,则返回负数;
若str1>str2,则返回正数。
/模拟实现strcmp函数
#include<stdio.h>
#include<assert.h>
int my_strcmp(char* arr1,char* arr2)
{
assert(arr1 && arr2);
while(*arr1==*arr2)
{
if(*arr1=='\0')
return 0;
}
return *arr1-*arr2;
}
int main()
{
char *arr1="abcde";
char *arr2="abcd";
int ret=my_strcmp(arr1,arr2);
printf("%d\n",ret);
return 0;
}
strcpy函数
C语言标准库函数strcpy,把从src地址开始且含有'\0'结束符的字符串复制到以dest开始的地址空间,对src字符串一个一个进行拷贝,当遇到NULL时,dest拷贝停止。
模拟实现strcpy函数
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char *dest,const char *src)
{
char *cp=dest;
assert(src && dest);
while(*dest++=*src++)
{
;
}
return cp;
}
int main()
{
char arr[30]={0};
printf("string=%s\n",my_strcpy(arr,"hello world"));
return 0;
}
strcat函数
将两个char类型连接。
char d[20]="GoldenGlobal"; char *s="View"; strcat(d,s);
结果放在d中
printf("%s",d);
输出 d 为 GoldenGlobalView (中间无空格)
d和s所指内存区域不可以重叠且d必须有足够的空间来容纳s的字符串。
返回指向d的指针。
模拟实现strcat函数
#include<stdio.h>
#include<assert.h>
char* my_strcat(char* dest,char* src)
{
char *cp=dest;
assert(src && dest);
while(*dest!='\0')
{
dest++;
}
while(*dest++=*src++)
{
;
}
return cp;
}
int main()
{
char arr1[20]="abc";
char *arr2="def";
printf("%s\n",my_strcat(arr1,arr2));
return 0;
}
strstr函数
strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL!
//模拟实现strstr函数
#include<stdio.h>
#include<assert.h>
const char* My_strstr(const char* arr, const char* src)
{
const char * str1 = arr;
const char * str2 = src;
const char * start = NULL;
assert(arr);
assert(src);
if (*str2 == '\0')
{
return str1;
}
while (*str1)
{
start = str1;
while ((*str1) && (*str2) && (*str1 == *str2))
{
str1++;
str2++;
}
if (*str2 == '\0')
{
return start;
}
str1 = start + 1;
str2 = src;
}
return NULL;
}
int main()
{
char arr[] = "abbbccbcdefghk";
char src[] = "bcd";
char* ret = My_strstr(arr, src);
if (ret == NULL)
{
printf("not exist!");
}
else
{
printf("%s\n", ret);
}
system("pause");
return 0;
}
以上就是C语言中几种常见的函数,模拟实现的方法都比较简单。欢迎各位朋友批评改正,新手上路,大神勿喷。谢谢大家~