ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

与结束标志有关字符串函数

2021-05-19 12:51:19  阅读:134  来源: 互联网

标签:标志 arr const 函数 dest char 字符串 my


  1. strlen(const char*str)求字符串长度的函数,找'\0'前面的字符个数,形参是const char*str  ,注意库函数返回类型是unsigned int,不可能是负数

    下面三种方式模拟实现strlen

//int my_strlen1(char* arr)
//{
//	int count = 0;
//	while (*arr != '\0')
//	{
//		arr++;
//	    count++;
//	}
//	return count;
//}int my_strlen2(char* arr)
//{
//	if (*arr != '\0')
//	{
//		return my_strlen2(arr + 1) + 1;
//	}
//	else
//		return 0;
//}int my_strlen3(char* arr)
//{
//	char*t = arr;
//	while (*arr != '\0')
//	{
//		arr++;
//	}
//	return arr - t;
//}
//int main()
//{
//	char arr[] = "abcdef";
//	printf("%d\n",my_strlen1(arr));
//	printf("%d\n",my_strlen2(arr));
//	printf("%d\n",my_strlen3(arr));
//	return 0;
//}

1是只要没看到\0就计数加加,2是函数递归思想,遇到\0返回零,其他返回下一个原函数加1,第三种是运了指针,两个指针相减就是中间元素的个数

2.strcpy(char*dest,const char*src)表示把第二个字符串中的元素拷贝到第一个字符串中,库函数返回类型是char*第一个字符串首元素地址

里面注意第一个字符串不能用char*arr=”abcdef“,这是常量字符串

/void my_strcpy(char* dest, const char* src)//const修饰源头字符串表示里面字符串是常量
//{
//	while (*src != '\0')
//	{
//		*dest = *src;
//		src++;
//		dest++;
//	}
//	*dest = *src;
//}
//char* my_strcpy1(char* dest, const char* src)
//{
//	char* ret = dest;//把要被拷贝字符串的首地址存起来,地址里面的值是可以改变的
//	while (*dest++ = *src++);//这是后置++,先解引用在++,把src元素从第一个赋给dest,直到赋给'\0'时,表达式里面正好是0=0停下
//	return ret;
//}
//int main()
//{
//	char arr1[] = "abcdefgh";
//	char arr2[] = "zyxdsg";
//	my_strcpy(arr1, arr2);
//	printf("%s\n", arr1);
//	printf("%s\n", my_strcpy1(arr1, arr2));
//}

这是一种方法,吧源头数组地址的值给了目的地的地址,一直加一直交换,直到遇到\0停下,还短一个\0在赋给,第二中是第一种的简化升级,有注释可以理解。

3.strcat(arr1,arr2)追加字符串,把源头追加到目的地中,目的地的空间要足够大,两个字符串中都要有'\0'

char * strcat ( char * destination, const char * source );标准 

char* my_strcat(char* dest, const char* src)
//{
//	assert(dest != NULL);
//	assert(src != NULL);
//    char* ret = dest;//把首元素地址存起来
//	while (*dest != '\0')//找到dest字符串\0的地址
//	{
//		dest++;
//	}
//	while (*dest++ = *src++);//直到加到'\0'停下
//	return ret;
//}
//int main()
//{
//	char arr1[40] = "hello";
//	char arr2[] = "world";
//	printf("%s\n", my_strcat(arr1, arr2));
//	printf("%s\n", arr1);
//	return 0;
//}

4.strcmp    int strcmp ( const char * str1, const char * str2 );

比较两个字符串,(比较奥斯卡码值)如果字符串1小于字符串2返回小于0的数字,等于返回0,大于返回大于0的数字

int my_strcmp(const char* str1, const char* str2)
//{
//	assert(str1 && str2);//断言两个字符串不能为空指针
//	while (*str1 != '\0')//当第一个字符串没有结束时
//	{
//		if (*str1 == *str2)
//		{
//			str1++;
//			str2++;
//		}
//		else
//			return (*str1) - (*str2);//当里面的值相同时,返回一个整数
//	}
//	if (*str1 == *str2)//当最后一个'\0'也相同时就是相同,返回0
//	{
//		return 0;
//	}
//	else                 //当str1最后一个是‘\0’而str2不是,说明str1《str2
//		return -1;
//}
//int main()
//{
//	char arr1[] = "abcdefg";
//	char arr2[] = "abcdefghi;
//	int ret = my_strcmp(arr1, arr2);
//	if(ret>0)
//	{
//		printf("arr1>arr2\n");
//	}
//   else if(ret==0)
//	{
//		printf("arr1=arr2\n");
//	}
//   else
//	{
//		printf("arr1<arr2\n");
//	}
//    return 0;

2,3,4都是长度不受限制都是要看到'\0'都要看结束标志

标签:标志,arr,const,函数,dest,char,字符串,my
来源: https://blog.51cto.com/u_15167093/2785773

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有