strncmp、strncpy、strncat、strlen库函数的实现
2013-09-07 20:58
344 查看
1 #include <unistd.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4
5 //字符串比较函数的实现
6 int my_strncmp(const char *s1,const char *s2,size_t n){
7 //判断参数是否给对,避免段错误
8 if(s1==NULL||s2==NULL)printf("param error!\n"),exit(-1);
9 if(*s1==*s2&&--n){//一个一个字符的比较,比较n次
10 s1++;
11 s2++;
12 }
13 if(*s1>*s2)
14 return 1;
15 else if(*s1<*s2)
16 return -1;
17 else
18 return 0;
19
20 }
21
22
23 //字符串复制函数的实现
24 char * my_strncpy(char* des,const char* src,size_t n){
25 if(des==NULL||src==NULL)printf("param error!\n"),exit(-1);
26 else{
27 char *tmp=des;
28 int i=n;
29 while(n--&&(*tmp++=*src++)!='\0'/*&&--n*/){};//此处"--"放在n前面则会少复制一个字符,如果放在后面则可以
30 *tmp='\0';
31 return des;
32 }
33 }
34 //字符串拼接函数的实现
35 char *my_strncat(char *des, const char *src, size_t n){
36 if(des==NULL||src==NULL)printf("param error!\n"),exit(-1);
37 char *tmp = des;
38 if (n) {
39 //先移到des字符串的最后一个字符
40 while (*tmp)
41 tmp++;
42 //从最后一个字符开始赋值
43 while ((*tmp++ = *src++) != 0) {
44 if (--n == 0) {
45 *tmp = '\0';
46 break;
47 }
48 }
49 }
50 return des;
51 }
52
53 int my_strlen(char *str){
54 int count=0;
55 while(*str++!='\0'){
56 count++;
57 }
58 return count;
59 }
60
61 int main(){
62 char des[36];
63 printf("deslen=%d\n",sizeof(des));
64 char *src="hhahaha";
65 my_strncpy(des,src,5);
66 printf("%s\n",des);
67 src="hpllo world";
68
69 my_strncat(des,src,4);
70 printf("des=%s\n",des);
71 printf("src=%s\n",src);
72
73 int cmp=my_strncmp(des,src,7);
74 printf("cmp=%d\n",cmp);
75
76 int n=my_strlen(src);
77 printf("length=%d\n",n);
78
79 }
2 #include <stdio.h>
3 #include <stdlib.h>
4
5 //字符串比较函数的实现
6 int my_strncmp(const char *s1,const char *s2,size_t n){
7 //判断参数是否给对,避免段错误
8 if(s1==NULL||s2==NULL)printf("param error!\n"),exit(-1);
9 if(*s1==*s2&&--n){//一个一个字符的比较,比较n次
10 s1++;
11 s2++;
12 }
13 if(*s1>*s2)
14 return 1;
15 else if(*s1<*s2)
16 return -1;
17 else
18 return 0;
19
20 }
21
22
23 //字符串复制函数的实现
24 char * my_strncpy(char* des,const char* src,size_t n){
25 if(des==NULL||src==NULL)printf("param error!\n"),exit(-1);
26 else{
27 char *tmp=des;
28 int i=n;
29 while(n--&&(*tmp++=*src++)!='\0'/*&&--n*/){};//此处"--"放在n前面则会少复制一个字符,如果放在后面则可以
30 *tmp='\0';
31 return des;
32 }
33 }
34 //字符串拼接函数的实现
35 char *my_strncat(char *des, const char *src, size_t n){
36 if(des==NULL||src==NULL)printf("param error!\n"),exit(-1);
37 char *tmp = des;
38 if (n) {
39 //先移到des字符串的最后一个字符
40 while (*tmp)
41 tmp++;
42 //从最后一个字符开始赋值
43 while ((*tmp++ = *src++) != 0) {
44 if (--n == 0) {
45 *tmp = '\0';
46 break;
47 }
48 }
49 }
50 return des;
51 }
52
53 int my_strlen(char *str){
54 int count=0;
55 while(*str++!='\0'){
56 count++;
57 }
58 return count;
59 }
60
61 int main(){
62 char des[36];
63 printf("deslen=%d\n",sizeof(des));
64 char *src="hhahaha";
65 my_strncpy(des,src,5);
66 printf("%s\n",des);
67 src="hpllo world";
68
69 my_strncat(des,src,4);
70 printf("des=%s\n",des);
71 printf("src=%s\n",src);
72
73 int cmp=my_strncmp(des,src,7);
74 printf("cmp=%d\n",cmp);
75
76 int n=my_strlen(src);
77 printf("length=%d\n",n);
78
79 }
相关文章推荐
- c语言中部分限制字符函数的实现strncmp,strncat,strncpy,strstr,strrstr
- 模拟实现strncpy,strncat,strncmp
- 【C语言】 实现strncpy,strncat,strncmp
- 模拟实现strcpy,strncpy,strcat,strncat,strcmp,strncmp,memcpy,memmove
- 字符串函数模拟实现之strcpy、strncpy、strcmp、strncmp、strcat、strncat
- [置顶] 【C语言】 实现strncpy,strncat,strncmp
- [C语言]模拟实现strcpy/strncpy/strcat/strncat/strcmp/strncmp/strstr
- 模拟实现strcpy 模拟实现strncpy 模拟实现strcat 模拟实现strncat 模拟实现strcmp 模拟实现strncmp 模拟实现memcpy 模拟实现memmove
- 模拟实现strncpy,strncat,strncmp
- strlen(),strcpy(),strncpy(),strcat(),strncat(),strcmp(),strncmp()等函数的实现
- 模拟实现strcpy,strncpy,strcat,strncat,strcmp,strncmp
- 模拟实现C库函数strncpy、strncat、strncmp
- 模拟实现strcmp,strncmp,strstr,strcat,strncat,strcpy,strncpy,strlen ,memcpy,memmove等函数
- 模拟实现//strcpy //strncpy //strcat //strncat //strcmp //strncmp //memcpy //memmove
- 模拟实现strncpy ,模拟实现strncat ,模拟实现strncmp
- 模拟实现C库函数:strncpy、strncat和strncmp
- 模拟实现strncpy,strncat,strncmp
- 模拟实现strncpy,strncat,strncmp
- 模拟实现长度受限制的字符串函数(strncpy、strncat、strncmp)
- 《c程序设计语言》读书笔记-5.5-指针实现strncpy,strncat,strncmp