【C++】如何理解函数重载【2】--函数重载示例

举报
王博Kings 发表于 2020/12/30 01:29:04 2020/12/30
【摘要】 目录 1.函数讲解 1.1 统计数字包含多少位 1.2 删除一组数字的后面几位,比如12345678,删除678,剩下12345 1.3 本程序返回一个数的前几位数字,比如12345678,3,返回就是123 1.4 本函数返回指向string的指针,指向前几个character 2 总体程序示例  1.函数讲解 1.1 统计数字包含多少位 //统计有几位...

目录

1.函数讲解

1.1 统计数字包含多少位

1.2 删除一组数字的后面几位,比如12345678,删除678,剩下12345

1.3 本程序返回一个数的前几位数字,比如12345678,3,返回就是123

1.4 本函数返回指向string的指针,指向前几个character

2 总体程序示例


 1.函数讲解

1.1 统计数字包含多少位


  
  1. //统计有几位
  2. unsigned digits = 1;
  3. while (n/=10)
  4. {
  5. digits++;
  6. }

1.2 删除一组数字的后面几位,比如12345678,删除678,剩下12345


  
  1. if (digits > ct)
  2. {
  3. ct = digits - ct;
  4. while (ct--)
  5. {
  6. num /= 10;
  7. }
  8. return num;
  9. }
  10. else
  11. {
  12. return num;//如果ct>=number ,返回整个数字
  13. }

1.3 本程序返回一个数的前几位数字,比如12345678,3,返回就是123


  
  1. //本程序返回一个数的前几位数字,比如12345678,3,返回就是123
  2. unsigned long left(unsigned long num, unsigned ct)
  3. {
  4. unsigned digits = 1;
  5. unsigned long n = num;
  6. //做一个错误判断
  7. if (ct == 0 || num == 0)
  8. return 0;//没数据时返回0
  9. //统计有几位
  10. while (n/=10)
  11. {
  12. digits++;
  13. }
  14. //保留左边前面几位数字
  15. if (digits > ct)
  16. {
  17. ct = digits - ct;
  18. while (ct--)
  19. {
  20. num /= 10;
  21. }
  22. return num;
  23. }
  24. else
  25. {
  26. return num;//如果ct>=number ,返回整个数字
  27. }
  28. }

1.4 本函数返回指向string的指针,指向前几个character


  
  1. //本函数返回指向string的指针,指向前几个character
  2. char * left(const char * str, int n)
  3. {
  4. if (n < 0)
  5. n = 0;
  6. char *p = new char[n + 1];
  7. int i;
  8. for ( i = 0; i < n && str[i]; i++)
  9. {
  10. p[i] = str[i];//copy
  11. }
  12. //上面有个循环,循环结束了i可能等于n,也可能小于n,如果字符数目小于n的话,这个循环的意思,就是把剩下不足的补空字符
  13. while (i<=n)
  14. {
  15. p[i++] = '\0';
  16. }
  17. return p;
  18. }

2 总体程序示例


  
  1. //leftover.cpp -- 重载left函数示例
  2. #include<iostream>
  3. unsigned long left(unsigned long num, unsigned ct);
  4. char * left(const char * str, int n = 1);//这里默认了n=1
  5. int main()
  6. {
  7. using namespace std;
  8. char * trip = "Hawaii!!";// test value
  9. unsigned long n = 12345678;// test value
  10. int i;
  11. char * temp;
  12. for (i = 1; i < 10; i++)
  13. {
  14. cout << left(n, i) << endl;
  15. temp = left(trip, i);
  16. cout << temp << endl;
  17. delete[] temp;
  18. }
  19. return 0;
  20. }
  21. //本程序返回一个数的前几位数字,比如12345678,3,返回就是123
  22. unsigned long left(unsigned long num, unsigned ct)
  23. {
  24. unsigned digits = 1;
  25. unsigned long n = num;
  26. //做一个错误判断
  27. if (ct == 0 || num == 0)
  28. return 0;//没数据时返回0
  29. //统计有几位
  30. while (n/=10)
  31. {
  32. digits++;
  33. }
  34. //保留左边前面几位数字
  35. if (digits > ct)
  36. {
  37. ct = digits - ct;
  38. while (ct--)
  39. {
  40. num /= 10;
  41. }
  42. return num;
  43. }
  44. else
  45. {
  46. return num;//如果ct>=number ,返回整个数字
  47. }
  48. }
  49. //本函数返回指向string的指针,指向前几个character
  50. char * left(const char * str, int n)
  51. {
  52. if (n < 0)
  53. n = 0;
  54. char *p = new char[n + 1];
  55. int i;
  56. for ( i = 0; i < n && str[i]; i++)
  57. {
  58. p[i] = str[i];//copy
  59. }
  60. //上面有个循环,循环结束了i可能等于n,也可能小于n,如果字符数目小于n的话,这个循环的意思,就是把剩下不足的补空字符
  61. while (i<=n)
  62. {
  63. p[i++] = '\0';
  64. }
  65. return p;
  66. }

文章来源: kings.blog.csdn.net,作者:人工智能博士,版权归原作者所有,如需转载,请联系作者。

原文链接:kings.blog.csdn.net/article/details/93368470

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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