与结束标志有关字符串函数
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'都要看结束标志
关注公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
深入浅出分布式存储性能优化方案
Latency 指标对于存储系统性能的重要性 我们分析一套分布式存储系统,主要从可靠性、易用性和性能三个维度着手分析。 可靠性:是存储系统的基石,一款存储系统至少需要提供 99.99%的数据可靠性,数据丢失或者错乱对于存储系统是致命的,对大数据、云存储这样大规模的分布式集群。 易用性:是系统管理员最关心的问题,主要体现产品设计、故障处理和系统的扩展性。 性能:如果可靠性是存储系统的基石,那么性能是存储系统的灵魂,对一款优秀存储系统,高可靠与高性能缺一不可。 本文将从性能的维度分析分布式存储系统,那么如何分析一款分布式存储系统的性能呢? 让我们先了解评测存储系统的主要参数:IO Type、IO Mode、IO Size 和 IO Concurrency;这些参数的值的不同组合对应了不同的业务模型,场景的模型如下表所示: 表一:常用业务类型 注 1:SPC-1,主要衡量存储系统在随机小 IO 负荷下的 IOPS,而 SPC-2 则主要衡量在各种高负荷连续读写应用场合下存储系统的带宽。 注 2:SPC-1 将测试区域抽象为 ASU,ASU 分为三类:ASU1 临时数据区域,ASU2 用户数据...
-
下一篇
实时同步部署(inotify,sersync)
使用inotify现实,实时同步的前提条件 a 先部署好rsync服务 b 其次部署好inotify服务,并对需要实时的数据进行监控 c 建立rsync与inotify服务的关联,对变化的数据进行实时备份传输 测试最少需要两台主机 cat /etc/hosts 192.168.40.26 nfs01 # rsync客户机+inotify,把监控的数据实时传输到备份服务器 192.168.40.27 backup01 # rsync服务器,作为备份服务器 1 修改ip 主机名 查看rsync是否安装 hostnamectl set-hostname nfs01 rpm -qa inotify-tools nmcli c mod eth1 ipv4.addr "192.168.40.26/24" nmcli d reapply eth1 ifconfig # 系统优化,请参考:https://blog.51cto.com/lehappy/2781516 2 rsync服务器部署参考 https://blog.51cto.com/lehappy/2759036 3 inotify服务部...
相关文章
文章评论
共有0条评论来说两句吧...

微信收款码
支付宝收款码