模拟输出受限制的字符串函数-strncat,strncmp,strncpy
2016-04-19 21:07
411 查看
1.模拟输出受限制的字符转连接函数_strncat
首先先给出函数的测试部分:int main() { int k=0; char *ret=NULL; int len=0; char arr1[30]="i love you "; char arr2[]="china"; len=strlen(arr2); printf("请输入你要连接的字符个数:"); scanf("%d",&k); if(k<=len) { ret=my_strncat(arr1,arr2,k); } printf("%s\n",ret); system("pause"); return 0; }
所谓受限制的字符串连接函数就是可以按照设计者的意愿进行字符串连接,同时它也有一个比没有限制的字符串连接函数_srtcat多了一个特性就是可以自己连接自己。
下面我们来看受限制的字符串连接函数_strncat的模拟实现
char *my_strncat(char * dest,char *src,int len) { char *str1=dest; char *str2=src; assert(dest); assert(src); while(*str1 != '\0') //到str1的末位置 { str1++; } while(len>0 &&(*str2 != '\0')) //,len控制复制字符的个数,复制str2到str1 { *str1++=*str2++; len--; } *str1='\0'; //后面补'\0' return dest; }
2.模拟输出受限制的字符串比较函数_strncmp
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> #include<assert.h> int my_strncmp(const char *dest,const char*src,int k) { assert(dest); assert(src); while(k>0 && (*dest == *src)) { if(*dest == '\0') return 0; dest++; src++; k--; } return *dest-*src; } int main() { int k=0; int ret=0; char arr1[]="abcdef"; char arr2[]="xbcdef"; printf("请输入你要比较的位数:"); scanf("%d",&k); ret=my_strncmp(arr1,arr2,k); if(ret == 0) { printf("%s等于%s\n",arr1,arr2); } else if(ret > 0) { printf("%s大于%s\n",arr1,arr2); } else { printf("%s小于%s\n",arr1,arr2); } system("pause"); return 0; }
3.模拟输出受限制的字符串拷贝函数_strncpy
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> #include<assert.h> char *my_strncpy(char *dest,char *src,int k) { char *tmp=dest; assert(dest); assert(src); while(k--) { *dest++=*src++; } *dest='\0'; return tmp; } int main() { char *ret=NULL; int k=0; char arr1[20]; char arr2[]="i love you"; printf("请输入你要拷贝的字符的个数:"); scanf("%d",&k); ret=my_strncpy(arr1,arr2,k); printf("%s\n",ret); system("pause"); return 0; }
通过模拟实现受限制的字符串连接函数_strncat,受限制的字符串比较函数_strncmp和受限制的字符串复制函数_strncpy,使我更好的理解了字符串的这三种函数和受限制的区别。我觉得受限制就是说明该函数存在可以按照程序设计者的喜好来操作函数-控制字符的个数。
相关文章推荐
- F-Divisor Summation|约数枚举
- [BZOJ4542]大数
- Volatile关键字详解
- 动态的添加和丢弃关键点---32
- 水平居中
- 模板的特化
- Android TV开发--实现屏保图片云端可配置
- Android开发中,那些让你相见恨晚的方法、类或接口
- ZOJ Problem Set - 3490 String Successor(字符串模拟)
- java.sql.SQLException: 无效的列索引
- 平衡二叉树(AVL树)的基本操作
- 常规选择器——进阶选择器
- ubantu下解压命令大全
- 三和韓長庚 著 易學原理總論 對讀 101_120
- Python风格规范
- Matlab 的fspecial函数用法
- leetcode——81——Search in Rotated Sorted Array II
- 机器学习总结1_学习理论
- Oracle-SQL02
- Android资源文件分类