不受结束标识符限制的字符串函数

5.strncpy(arr1,arr2,4)把arr2前四个元素拷贝到arr1,长度不够拷贝个数,在拷贝元素后面加0,直到够拷贝个数为止

char* my_strncpy(char* dest, const char* src, int num)
//{
//	char* ret = dest;
//	while (num&&(*dest++=*src++))
//		{
//			num--;
//		}
//	while (num)
//	{
//		*dest = '\0';
//		num--;
//	}
//	return ret;
//	}
//int main()
//{
//	char arr1[] = "abcdefg";
//	char arr2[] = "hello zyx";
//	char*ret=my_strncpy(arr1, arr2, 6);
//	printf("%s", ret);
//}

6.char* my_strncat(char* dest,const char* src, int num)把源头的n个字符追加到dest字符串中,当追加个数大于源头元素个数时追加‘\0’

char* my_strncat(char* dest,const char* src, int num)
//{
//	char* ret = dest;
//	while (*dest)
//	{
//		dest++;
//	}
//	while (num && (*dest++ = *src++))
//	{
//		num--;
//		if (num==0)
//		{
//			return ret;
//		}
//	}
//	return ret;
//}
//int main()
//{
//	char arr1[40] = "abcdef";
//	char arr2[] = "hello world";
//	printf("%s",my_strncat(arr1, arr2, 18));
//    return 0;
//}

这是模拟实现,首先等目的字符串到了结束标志,再给后面追加源头字符串追加n个

7.int strncmp(const char*str1,const str2,unsigned int num);字符串比较,比较num对返回结果。

8.strstr 找子字符串,const char * strstr ( const char * str1, const char * str2 );

      取字符串1里面查找字符串2,假如有返回字符串中字符串2的首地址,否则返回空指针

char* my_strstr(const char* str1, const char* str2)
{
	const char* p1 = str1;
	if (*str2 =='\0')
	{
		return (char*)str1;
	}
	while (*p1)
	{
		const char* s1 = p1;
        const char* s2 = str2;
		while ((*s1 == *s2)&&(*s2)&&*(s1))
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
		{
			return (char*)p1;
		}
		p1++;
	}
	return NULL;
}
int main()
{
	const char* p1 = "abcdefbcdef";
	const char* p2 = "bcd";
	char *ret= my_strstr(p1, p2);
	if (ret == NULL)
		printf("不是子串\n");
	else
		printf("%s", ret);
	return 0;
}

这个函数实现先把目的地字符串存起来,然后再用const修饰两个字符串,存p1,源头字符串,好处就是改变p1不好会改变源头字符串,返回的都是当时的值,让电脑一直几下现在比较的位置。

上一篇:网络攻击与防御技术实验一


下一篇:与结束标志有关字符串函数