【C语言练习题】编写一个函数,它从一个字符串中提取一个子字符串

举报
王建峰 发表于 2021/11/19 02:34:34 2021/11/19
【摘要】 《C与指针》 习题 4.14   编写一个函数,它从一个字符串中提取一个子字符串。函数原型如下: int substr(char dst[], char src[],int start, int len){} 目标是:从 src&...

《C与指针》 习题 4.14

 

编写一个函数,它从一个字符串中提取一个子字符串。函数原型如下:

int substr(char dst[], char src[],int start, int len){}

目标是:从 src 数组起始位置向后偏移 start个字符的位置开始,最多复制 len 个非NUL 字符到 dst数组。在复制完毕之后, dst 数组必须以 NUL字节结尾。函数的返回值是存储于 dst 数组中的字符串的长度。
 如果start所指定的位置越过了src数组的尾部,或者start或len的值为负,那么复制到dst数组的是一个空字符串。

 

代码


  
  1. //substr.c
  2. #include <stdio.h>
  3. #include <assert.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. #define N 30
  7. //函数声明 -- 全局作用域
  8. void substr( char dst[], char src[], int start, int len );
  9. void main(void)
  10. {
  11. char src[] = "Hello_World!";
  12. char dst[N];
  13. int len,start;
  14. printf("please input len:");
  15. scanf("%d",&len);
  16. printf("please input start:");
  17. scanf("%d",&start);
  18. substr( dst, src, start-1, len );//提取字符串动作
  19. printf("%s\n",dst);
  20. }
  21. void substr( char dst[], char src[], int start, int len )
  22. {
  23. assert(dst);
  24. assert(src); //判断地址有效性
  25. char *p = src + start;
  26. int n = strlen(p);
  27. printf("src length is:%d\n",n);
  28. int i = 0;
  29. if ( n < len || start < 0 )
  30. {//参数无效,提取字符串为空
  31. len = 0;
  32. }
  33. while(len)
  34. {//提取len长度的字符串到dst指定的内存
  35. dst[i] = src[start + i];
  36. i++;
  37. len--;
  38. }
  39. dst[i] = '\0'; // NUL结束字符串
  40. }

 

演示

文章来源: blog.csdn.net,作者:hinzer,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/feit2417/article/details/85220726

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。