关于面试试题对于库函数的写法;

1,模拟实现  strcpy       一般形式为 strcpy(字符数组1,字符串2),它表示“字符串的复制函数”,作用是将字符串2复制到字符数组1中去。

#include <stdio.h>
#include <assert.h>
#include <string.h>

char *my_strcpy(char *dest, const char *src)
{
	char *ret = dest;
	assert((dest != NULL)&&(src != NULL));
	while(*dest++ = *src++)
	{
		;
	}
	return ret;

}
int main()
{
	char arr[10];
	printf("%s\n",my_strcpy(arr,"Hello!"));

	system("pause");
	return 0;
}
2, 模拟实现 strcat    一般形式为 strcat(字符数组1,字符数组2),作用是吧两个字符数组中的字符串连接起来,把字符串2接到字符串1的后面去,结果放在字符数组1中;

#include<stdio.h>
#include <assert.h>

char *my_strcat(char *dest, const char *str)
{
	 char *ret = dest;
	assert((dest != NULL)&&(str != NULL));
	while (*dest != '\0')
	{
		dest++;
	}
	while (*dest++ = *str++)
	{
		;
	}
	return ret;
}

int main()
{
	char arr1[20] = "Hello ";
	char arr2[] = "bit";
	printf("%s\n",my_strcat(arr1,arr2));

 	system("pause");
	return 0;
}
3, 模拟实现 strcmp   一般形式为 strcmp(字符串1,字符串2),它的作用是比较字符串1和字符串2 ;

(1)如果字符串1=字符串2,则函数值为0 ; (2) 如果字符串1>字符串2,则返回一个正数; (3)字符串1<字符串2 返回负数;

#include <stdio.h>
#include <assert.h>

int my_strcmp(const char *dest, const char *str)
{
	assert((dest != NULL)&&(str != NULL));
	while (*dest == *str)
	{
		if (*dest == '\0')
			return 0; // 两个字符串相同;
		dest++;
		str++;
	}
	if ((*dest - *str) > 0)
	{
		return 1;    // arr1 大
	}
	else
		return -1;   // arr2 大
}

int main()
{
	char arr1[] = "ABCDEF";
	char arr2[] = "ABCDBE";
	int ret = 0;
	ret = my_strcmp(arr1,arr2);
	printf("%d\n",ret);

	system("pause");
	return 0;
}

4, 模拟实现 strstr   一般形式为    strstr(字符串,字串) 作用是 用来检索子串在字符串中首次出现的位置;

#include<stdio.h>
#include <assert.h>

char *my_strstr(const char *str, const char *substr)
{
	char *cur = str;
	char *str1 = NULL;
	char *str2 = NULL;
	if (*substr == '\0')
	{
		return str;
	}
	while (*cur)
	{
		str1 = cur;
		str2 = substr;
		while ((*str2)&&(*str1 == *str2))
		{
			str1++;
			str2++;
		}
		if (*str2 == '\0')
		{
			return cur;
		}
		cur++;
	}
	return NULL;
}



int main()
{
	char arr1[] = "abbbbcd";
	char arr2[] = "bbcd";
	printf("%s\n",my_strstr(arr1,arr2));

	system("pause");
	return 0;
}

5, 模拟实现 memcpy  一般形式为 memcpy(字符串1,字符串2,n) 作用是  讲字符串2中的前n个字符复制到字符串1中去,其余的位置仍然放字符串1的其他字符

#include <stdio.h>

void *my_memcpy(void *dest, void *src, int n)
{
	char *pdest = (char*)dest;
	char *psrc = (char*)src;
	while (n)
	{
		*pdest++ = *psrc++;
		n--;
	}
	return dest;
}

int main()
{
	char arr1[] = "ABCDEF";
	char arr2[] = "QWER";
	int k = 3;
	printf("%s\n",my_memcpy(arr1,arr2,k));

	system("pause");
	return 0;
}

6, 模拟实现 memmove    作用是字符串中的字符复制解决重叠的问题

#include <stdio.h>
#include <assert.h>

void *my_memmove(void *dest, void *src, int n)
{
	char *pdest = (char*)dest;
	char *psrc = (char*)src;

	assert((dest != NULL)&&(src != NULL));
	if ((pdest >= psrc)&&(pdest <= psrc+n))
	{
		while (n)
		{
			*(pdest+n-1) = *(psrc+n-1);
			n--;
		}
	} 
	else
	{
		while (n)
		{
			*pdest++ = *psrc++;
			n--;
		}
	}
	return dest;
}

int main()
{
	char arr1[] = "ABCDEF";
	my_memmove(arr1+1,arr1,3*sizeof(char));
	printf("%s\n",arr1);

	system("pause");
	return 0;
}

7, 模拟实现 strlen(三种方式)    计算字符个数

#include <stdio.h>

//int my_strlen(const char *p)  //计数器算法;
//{
//	int count = 0;
//	while (*p)
//	{
//		count++;
//		p++;
//	}
//	return count;
//}


//int my_strlen(const char *p)  //递归
//{
//	if (*p == '\0')
//	{
//		return 0;
//	}
//	else
//		return 1 + my_strlen(p+1);
//}

int my_strlen(const char *p)  //指针算法
{
	const char *start = p; //首地址
	while(*p)
	{
		p++;
	}
	return p - start;  //首尾相减
}


int main()
{
	char arr1[] = "ABCDEF";
	int ret = my_strlen(arr1);

	printf("%d\n",ret);
	system("pause");
	return 0;
}




  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值