面试-重写基础功能函数

重写基础函数

1. 字符串拷strcpy()

  函数strcpy的原型是char* strcpy(char* des , const char* src)des src 所指内存区域不可以重叠且 des 必须有足够的空间来容纳 src 的字符串。

 

char* strcpy( char* dst, const char* src ) {assert( NULL != dst && NULL != src );char* rtn = dst;while ( (*dst++ = *src++) != '\0' ) {}return rtn; 
}

 

  1) 最后拷贝了结束符’\0’;

  2源指针应该声明为 const 类型

  3要判断源指针和目的指针为空的情况

  4函数返回 char* 的目的是为了支持链式表达式,即strcpy可以作为其他函数的实参。

2. 字符串长度strlen()

  函数strlen的原型是size_t strlen(const char *s)

 

size_t strlen( const char* str ) {assert( NULL != str );size_t len = 0;while ( (*str++) != '\0' ) {++len;}return len;
}

 

  1sizeof是运算符,strlen是库函数

  2数组做sizeof的参数不退化,传递给strlen就退化为指针了。

3. 字符串连接strcat()

  函数strcat的原型是char* strcat(char* des, char* src)des src 所指内存区域不可以重叠且 des 必须有足够的空间来容纳 src 的字符串。

 

char* strcat( char* dst, const char* src) {assert( NULL != dst && NULL NULL != src );char* rtn = dst;while ( *dst != '\0' ) {++dst;}while ( (*dst++ = *src++) != '\0' ) {}return rtn;
}

 

 

 

4. 字符串比较strcmp()

  函数strcmp的原型是int strcmp(const char *s1,const char *s2)

    1s1==s2,返回零;

    2s1>s2,返回正数;

    3s1<s2,返回负数。

  即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止。

 

char * strcmp( const char* str1, const char* str2 ) {assert( NULL != str1 && NULL != str2 );while ( *str1 == *str2 ) {if ( *str1 == '\0' )break;++str1;++str2;}return *str1 - *str2;
}

 

 

5. memcpy()

void* memcpy( void* dst, const void* src, size_t count ) {assert( NULL != dst && NULL != src );void* rtn = dst;while ( count-- ) {*(char*)dst = *(const char*)src;dst = (char*)dst + 1;src = (const char*)src + 1;}return rtn;
}

 

6. memmove()

void* memmove( void* dst, const void* src, size_t count ) {assert( NULL != dst && NULL != src );void* rtn = dst;if ( dst <= src || (char*)dst >= ((const char*)src + count) ) {while ( count-- ) {*(char*)dst = *(const char*)src;dst = (char*)dst + 1;src = (const char*)src + 1;}} else {dst = (char*)dst + count - 1;src = (char*)src + count - 1;while ( count-- ) {*(char*)dst = *(const char*)src;dst = (char*)dst - 1;src = (char*)src - 1;}}return rtn;
}

 

7. atoi()

int atoi( const char* str ) {assert( NULL != str );while ( *str == ' ' || *str == '\t' || *str == '\n' ) {++str;}bool negative = false;if ( *str == '-' ) {++str;negative = true;} else if ( *str == '+' ) {++str }int rtn = 0;while ( *str >= '0' && *str <= '9' ) {rtn = rtn*10 + *str - '0';++str;}if ( negative )return -rtn;return rtn;
}

 

8. itoa()

char* itoa( int value, char* buf, int radix ) {assert( NULL != buf );char* rtn = buf;if ( value < 0 ) {*buf++ = '-';value = -value;}char* ptr = buf;while ( value > 0 ) {int v = value % 10;v /= 10;*ptr++ = (char)value + '0'}*ptr-- = '\0';while ( buf < ptr ) {char temp = *ptr;*ptr = *buf;*buf = temp;++buf;--buf;}return rtn;
}

9. 其他

  在linux下没有itoa这个函数linux下的字符转换函数只有:
    atof 字符串转换到浮点型数
     atoi 字符串转换到整型数: int atoi(const char *nptr);跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。
     atol 字符串转换到长整型数
     ecvt 浮点型数转换到字符串,取四舍五入
     fcvt 浮点型数转换到字符串,取四舍五入
     gcvt 浮点型数转换到字符串,取四舍五入
     strtod 字符串转换到浮点型数
     strtol 字符串转换到长整型数
     strtoul 字符串转换到无符号长整型数
     toascii 将整形数转换合法的ASCII字符串

转载于:https://www.cnblogs.com/wanghaiyang1930/p/9612981.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485150.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一次,人类在人工神经网络中发现了“真”神经元

来源&#xff1a;学术头条本文经授权转载自机器之心&#xff08;almosthuman2014&#xff09;OpenAI 的研究者们在人工神经网络 CLIP 上发现了「真」神经元&#xff0c;这种机制解释了 AI 模型对令人惊讶的视觉呈现进行分类时&#xff0c;为何拥有如此的准确性。研究人员表示&a…

【剑指offer】面试题21:调整数组顺序使奇数位于偶数前面(Java)

输入一个整数数组&#xff0c;实现一个函数来调整该数组中数字的顺序&#xff0c;使得所有奇数位于数组的前半部分&#xff0c;所有偶数位于数组的后半部分。 示例&#xff1a; 输入&#xff1a;nums [1,2,3,4] 输出&#xff1a;[1,3,2,4] 注&#xff1a;[3,1,2,4] 也是正确…

#35 string(缩点+动态规划)

容易发现有了交换相邻字符的操作后&#xff0c;只要字符串所含有的字符种类和数量相同其就是等价的。这样的状态只有n^3级别&#xff0c;将其抽象成点子串变换抽象成边后就是求最长路径了&#xff0c;缩点dp解决。 码量巨大&#xff0c;不是很明白要怎样才能用3k写完。 #includ…

AI破解脑电波,准确率超80%!高度还原你眼中最美的ta

本文转自公众号&#xff1a;新智元一千个人眼中有一千个哈姆雷特。由于主观差异&#xff0c;人类的审美有千万种。对于个人偏好的观察&#xff0c;人类尚且还需要思考揣摩&#xff0c;何况是机器&#xff0c;如何做到呢&#xff1f;但最近赫尔辛基大学和哥本哈根大学的一个研究…

【剑指offer】面试题22:链表中倒数第k个节点(Java)

输入一个链表&#xff0c;输出该链表中倒数第k个节点。为了符合大多数人的习惯&#xff0c;本题从1开始计数&#xff0c;即链表的尾节点是倒数第1个节点。例如&#xff0c;一个链表有6个节点&#xff0c;从头节点开始&#xff0c;它们的值依次是1、2、3、4、5、6。这个链表的倒…

svn安装配置

1、安装 #rpm -q subversion #yum -y install subversion 2、创建仓库 #mkdir -p /var/svn/svnrepos #svnadmin create /var/svn/svnrepos 3、修改权限控制文件authz #cd /var/svn/svnrepos/conf/ #vi authz 4、修改账号密码文件passwd #vi passwd 5、修改svn服务配置文件svnse…

委员建议开辟多种科研资助模式,呼唤“科研悬赏制”

本文资源来源自&#xff1a;中国新闻网转自公众号&#xff1a;科奖中心“创新的力量蕴藏在全社会之中&#xff0c;创新的资源理应向全社会开放。”全国政协委员&#xff0c;民盟中央常委、宁夏区委会主委冀永强近日接受中新社记者采访时表示&#xff0c;应积极鼓励探索“科研悬…

【剑指offer】面试题24:反转链表(Java)

定义一个函数&#xff0c;输入一个链表的头节点&#xff0c;反转该链表并输出反转后链表的头节点。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 限制&#xff1a; 0 < 节点个数 < 5000 代码&#xff1a; /** * De…

入局智慧城市,科技互联网巨头路在何方?

来源&#xff1a;亿欧智库我国已进入智慧城市建设新时期。各大巨头先后入局&#xff0c;拓展云服务场景&#xff0c;赋能政务管理与生产生活的方方面面。未来&#xff0c;场景延展、生态构建与人文关怀将成为智慧城市发展的大趋势。随着新基建政策、“十四五”规划和二〇三五年…

【剑指offer】面试题26:树的子结构(Java)

输入两棵二叉树A和B&#xff0c;判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构&#xff0c; 即 A中有出现和B相同的结构和节点值。 例如: 给定的树 A: 3 / \ 4 5 / \ 1 2 给定的树 B&#xff1a; 4 / 1 返回 true&#xff0c;因为…

什么是道德?

什么是道德&#xff1f; 热爱青年 百家号17-12-0615:23《什么是道德》 盖凡圣哲之学&#xff0c;不知有多少被后人歪曲谬解&#xff0c;长而久之&#xff0c;错误的反倒变成真理&#xff0c;害人不浅。 比如“道德”之说。绝大多数人理解成一种伦理概念。我们从小带大受到的洗脑…

马斯克的星际飞船SN10又炸了,但技术却向前迈出一大步!

来源&#xff1a;世界先进制造技术论坛(AMT)编辑&#xff1a;小艾 当地时间2021年3月3日&#xff0c;“钢铁侠”马斯克旗下太空探索公司Space X启动星际飞船&#xff08;Starship&#xff09;原型SN10的10公里飞行测试。在德克萨斯州进行高空试飞后&#xff0c;首次成功着陆&am…

【剑指offer】面试题27:二叉树的镜像(Java)

请完成一个函数&#xff0c;输入一个二叉树&#xff0c;该函数输出它的镜像。 例如输入&#xff1a; 4 / \ 2 7 / \ / \ 1 3 6 9 镜像输出&#xff1a; 4 / \ 7 2 / \ / \ 9 6 3 1 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3…

Elasticsearch 5.6.5 安装head插件

head安装包&#xff0c;下载地址&#xff1a;https://github.com/mobz/elasticsearch-head/archive/master.zip head 插件不能放在elasticsearch-5.6.5文件夹里&#xff0c;head 插件需要单独放&#xff0c;单独去执行&#xff1b;所以在elasticsearch-5.6.5同级目录下解压了 h…

MEMS传感器的下一轮技术变革

来源&#xff1a;麦姆斯咨询例如&#xff0c;红外探测器和微流控器件市场就在新冠肺炎大流行中获得了现象级的大幅增长。此外&#xff0c;疫情带来的居家隔离、远程办公&#xff0c;推动了5G部署、“非接触”语音交互以及数据中心等应用发展&#xff0c;从而加速了射频滤波器、…

【剑指offer】面试题28:对称的二叉树(Java)

请实现一个函数&#xff0c;用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样&#xff0c;那么它是对称的。 例如&#xff0c;二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1…

当量子计算遇到机器学习

作者&#xff1a; Dr.Alessandro Crimi 译者&#xff1a; 苏本如出品&#xff1a;CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;量子计算和机器学习已经成为当今炙手可热的话题。排除一些明显的炒作外&#xff0c;这当中也有一些真正的基础。随着传统计算技术的发展…

【剑指offer】面试题29:顺时针打印矩阵(Java)

输入一个矩阵&#xff0c;按照从外向里以顺时针的顺序依次打印出每一个数字。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 示例 2&#xff1a; 输入&#xff1a;matrix [[1,2,3,4],[5,6,7,8],[9,10,11,12]…

王贻芳院士:我们的科技管理过度强调竞争,缺乏稳定支持

来源&#xff1a; 科学网作者&#xff1a;倪思洁“我们中国的GDP大概很快会实现世界第一&#xff0c;我们什么时候也能在纯科学方面对世界有重大贡献呢&#xff1f;”3月7日&#xff0c;全国人大代表、中科院院士、中科院高能物理研究所所长王贻芳在江苏代表团上发言说。王贻芳…

flannel无法跨主机ping通容器的解决方式

前几天&#xff0c;出现了无法跨主机ping通容器的情况&#xff0c;导致一个node机网络中断&#xff0c;无法访问&#xff0c;排查过程如下。 首先确认&#xff0c;宿主机node2是可以ping通容器[rootnode2 ~]# ping 10.1.19.3 PING 10.1.19.3 (10.1.19.3) 56(84) bytes of data…