(---牛客网中刷题---)写出完整版的strcpy函数

如果编写一个标准strcpy函数的总分值为10,下面给出几个不同得分的答案:

2分

1
2
3
4
void strcpychar *strDest, char *strSrc )
{
  while( (*strDest++ = * strSrc++) != ‘\0’ );
}

4分

1
2
3
4
5
void strcpychar *strDest, const char *strSrc ) 
//将源字符串加const,表明其为输入参数,加2分
{
  while( (*strDest++ = * strSrc++) != ‘\0’ );
}

7分

1
2
3
4
5
6
void strcpy(char *strDest, const char *strSrc) 
{
 //对源地址和目的地址加非0断言,加3分
 assert( (strDest != NULL) && (strSrc != NULL) );
 while( (*strDest++ = * strSrc++) != ‘\0’ );
}

10分

//为了实现链式操作,将目的地址返回,加3分!

  1. char * strcpy( char *strDest, const char *strSrc )
  2. {
  3. assert( (strDest != NULL) && (strSrc != NULL) );
  4. char *address = strDest;
  5. while( (*strDest++ = * strSrc++) != \0 );
  6. return address;
  7. }
  8.  

字符串拷贝函数strcpy的原型:

char *strcpy(char *strDest,const char *strSrc);

strcpy函数将strSrc拷贝至输出参数strDest中,同时函数的返回值又是strDest。这样做并非多此一举,可以获得如下灵活性:

char str[20];

int length = strlen( strcpy(str, “Hello World”) );

作用:为了生成链式表达式。

在面试中常会遇到写 strcpy,以及相关的问题,比如说返回值的作用等。

->strcpy,strcat,strcmp,strstr的函数实现如下所示:

  1. char * strcpy(char* dst,const char* src)
  2. {
  3. assert((dst!=NULL)&&(src!=NULL));
  4. char* cp=dst;
  5. while(*src!='\0')
  6. {
  7. *dst=*src;
  8. src++;
  9. dst++;
  10. }
  11. *dst='\0';
  12. return cp;
  13. }
  14.  
  15. char* strcat ( char * dst , const char * src )
  16. {
  17. char * cp = dst;
  18. while( *cp )
  19. cp++; /* find end of dst */
  20. while(*src!='\0')
  21. {
  22. *cp++=*src++;
  23. }
  24. *cp='\0';
  25. return dst; /* return dst */
  26. }
  27.  
  28. int strcmp(const char* str1, const char* str2)
  29. {
  30. int ret = 0;
  31. while(!(ret=*(unsigned char*)str1-*(unsigned char*)str2) && *str1)
  32. {
  33. str1++;
  34. str2++
  35. }
  36. if (ret < 0)
  37. {
  38. return -1;
  39. }
  40. else if (ret > 0)
  41. {
  42. return 1;
  43. }
  44. return 0;
  45. }
  46.  
  47. char *strstr( const char *s1, const char *s2 )
  48. {
  49. int len2;
  50. if ( !(len2 = strlen(s2)) )
  51. return (char *)s1;
  52. for ( ; *s1; ++s1 )
  53. {
  54. if ( *s1 == *s2 && strncmp( s1, s2, len2 )==0 )
  55. return (char *)s1;
  56. }
  57. return NULL;
  58. }

strcat:将两个char类型连接

char d[20]="GoldenGlobal"; char *s="View"; strcat(d,s);
结果放在d中
printf("%s",d);
输出 d 为 GoldenGlobalView (中间无空格)
d和s所指内存区域不可以重叠且d必须有足够的空间来容纳s的字符串。
返回指向d的指针

strcmp:比较两个字符串str1和str2

若str1=str2,则返回零;
若str1<str2,则返回负数;
若str1>str2,则返回正数。

strstr:strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。  

写出完整版的strcpy函数及其他如:strcat,strcmp,strstr的函数实现的更多相关文章

  1. 4.写出完整版的strcpy函数

    (1) 2~4分 void strcpy(char *strDest, char *strSrc) { while((*strDest++ = *strSrc++)!='\0'); } //将源字符串 ...

  2. 完整版的strcpy函数

    char *strcpy(char *strDest,const char *strSrc) { assert((strDest!=NULL) && (strSrc!=NULL)); ...

  3. 7、完整版的strcpy函数

    char * strcpy( char *strDest, const char *strSrc ) { assert( (strDest != NULL) && (strSrc != ...

  4. strcpy完整版 与 strcpy为什么有返回值

    一个标准的strcpy函数: 原本以为自己对strcpy还算比较了解,结果面试时还是悲剧了. 下面给出网上strcpy的得分版本: 2分 void strcpy( char *strDest, cha ...

  5. 网上关于sort结构体排序都不完整,我来写一个完整版的 2014-08-09 16:50 60人阅读 评论(0) 收藏

    主要参考sort函数_百度文库, 但是那篇有错误 2.结构体排序,a升,b降,c降 平板视图 打印? 01 #include <iostream> 02 #include <algo ...

  6. 数据结构系列之2-3-4树的插入、查找、删除和遍历完整版源代码实现与分析(dart语言实现)

    本文属于原创,转载请注明来源. 在上一篇博文中,详细介绍了2-3树的操作(具体地址:https://www.cnblogs.com/outerspace/p/10861488.html),那么对于更多 ...

  7. C++多态,虚函数,虚函数表,纯虚函数

    1.多态性   指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作. C++支持两种多态性:编译时多态性,运行时多态性.    a.编译时多态性:通过重载函数实现 ,模板(2次编译)  ...

  8. 编写实现字符串拷贝函数strcpy()完整版

    有个题目编程实现字符串拷贝函数strcpy(),很多人往往很快就写出下面这个代码. void strcpy( char *strDest,char *strSrc ) { while(( *strDe ...

  9. 描述性统计分析-用脚本将统计量函数批量化&分步骤逐一写出

    计算各种描述性统计量函数脚本(myDescriptStat.R)如下: myDescriptStat <- function(x){ n <- length(x) #样本数据个数 m &l ...

随机推荐

  1. OpenCV——SURF特征检测、匹配与对象查找

    SURF原理详解:https://wenku.baidu.com/view/2f1e4d8ef705cc1754270945.html SURF算法工作原理 选择图像中的POI(Points of i ...

  2. PAT B1029 旧键盘 (20 分)

    旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及实际被输入的文字,请你列出肯定坏掉的那些键. 输入格式: 输入在 2 行中分别给出应该输入的文字.以及 ...

  3. opencv 显示摄像头数据

    本文章是一个小例子,主要是在ubuntu 系统中利用Opencv 显示摄像头的数据 ,显示到对话框中. 1.建立一个  main.cpp #include<opencv2/core/core.h ...

  4. 计算机视觉-sift(1)原理

    1999年由David Lowe首先发表于计算机视觉国际会议(International Conference on Computer Vision,ICCV),2004年再次经David Lowe整 ...

  5. 微信小程序开发 [03] 事件、数据绑定和传递

    1.事件绑定 在微信小程序中,事件的绑定依附于组件,当事件触发时,就会执行事件对应的处理函数. 我们回到前几章中的例子,将index页面调整为首页(app.json中调整pages数组元素的顺序),此 ...

  6. 几个简单易懂的排序算法php

    几个简单易懂的排序算法.排序算法,在应用到解决实际问题的时候(由于不一定总是数字排序),重点要分析出什么时候该交换位置. <?php // 冒泡排序 function bubble_sort(a ...

  7. 怎样让oracle实验本在不做实验时性能提升——win7下举例

    怎样让oracle实验本在不做实验时性能提升--win7下举例 型号:ThinkPad E431 系统:WIN7 实验使用的笔记本不使用数据库时.建议将oracle关闭,使其释放占用的资源. orac ...

  8. 20155339 Exp6 信息搜集与漏洞扫描

    20155339 Exp6 信息搜集与漏洞扫描 实验后回答问题 (1)哪些组织负责DNS,IP的管理. 全球根服务器均由美国政府授权的ICANN统一管理,负责全球的域名根服务器.DNS和IP地址管理. ...

  9. SVD(奇异值分解)小结

    注:奇异值分解在数据降维中有较多的应用,这里把它的原理简单总结一下,并且举一个图片压缩的例子,最后做一个简单的分析,希望能够给大家带来帮助. 1.特征值分解(EVD) 实对称矩阵 在理角奇异值分解之前 ...

  10. 阿里云centos系统中配置mysql,并远程连接到本地的navicat

    1.直接使用yum命令下载mysql5.6来进行安装是不能成功的,安装过程会有问题,这里我们需要使用rpm命令来先进下载.下载路径为:http://dev.mysql.com/get/mysql-co ...