天天看点

【C语言】、模拟实现strlen,strcmp,strcpy,strcat,strstr函数

          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;
}
           

    strcmp函数

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语言中几种常见的函数,模拟实现的方法都比较简单。欢迎各位朋友批评改正,新手上路,大神勿喷。谢谢大家~

【C语言】、模拟实现strlen,strcmp,strcpy,strcat,strstr函数

继续阅读