c语言小练习——字符串长度、拷贝、拼接、比较
/*
使用c语言知识实现下面程序:
1,实现strlen函数的功能
2,实现strcpy函数的功能
3,实现strcat函数的功能
4,实现strcmp函数的功能
不允许使用已有的str函数
*/
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<string.h> 4 #include<stdbool.h> 5 #include<stdlib.h> 6 #include<math.h> 7 /* 8 使用c语言知识实现下面程序: 9 1,实现strlen函数的功能 10 2,实现strcpy函数的功能 11 3,实现strcat函数的功能 12 4,实现strcmp函数的功能 13 不允许使用已有的str函数 14 */ 15 int mystrlen(char ch[]) { 16 int i, len = 0; 17 for (i = 0; ch[i]!='\0'; i++) { 18 len++; 19 } 20 return len; 21 } 22 23 char * mystrcpy(char des[], char src[]) { 24 int len_des = mystrlen(des); 25 int len_src = mystrlen(src); 26 int i; 27 if (len_des < len_src) { 28 //des[]的长度不够 29 return -1; 30 } 31 for (i = 0; des[i] != '\0'; i++) { 32 //des[]最终会被修改掉,所以提前全部写为结束符,保证后续无错。 33 des[i] = '\0'; 34 } 35 for (i = 0; src[i] != '\0'; i++) { 36 des[i] = src[i]; 37 } 38 des[i] = '\0'; 39 return des; 40 } 41 42 char * mystrcat(char des[], char src[]) { 43 int len_des = mystrlen(des); 44 int len_src = mystrlen(src); 45 int flag = 0; 46 int i; 47 if (len_src <= 0 || len_des <= 0) { 48 return -EFAULT; 49 } 50 for (i = 0; des[i] != '\0'; i++) { 51 flag += 1; 52 } 53 for (i = 0; src[i] != '\0'; i++) { 54 des[flag] = src[i]; 55 flag++; 56 } 57 return des; 58 } 59 60 int mystrcmp(char des[], char src[]) { 61 int len_des = mystrlen(des); 62 int len_src = mystrlen(src); 63 int i; 64 if (len_src < 0 || len_des < 0) { 65 return -EFAULT; 66 } 67 if (len_des > len_src) { 68 return 1; 69 } 70 else if (len_des == len_src) { 71 for (i = 0; i < len_des && i < len_src; i++) { 72 if (des[i] < src[i]) { 73 return -1; 74 } 75 else if (des[i] > src[i]) { 76 return 1; 77 } 78 } 79 return 0; 80 } 81 else if (len_des < len_src) { 82 return -1; 83 } 84 } 85 86 int main() 87 { 88 char str1[20] = "hello_world"; 89 char str2[] = "apple"; 90 char str3[] = "pie"; 91 int len; 92 int sign; 93 94 len = mystrlen(str1); 95 printf("str1 len is %d\n", len); 96 len = mystrlen(str2); 97 printf("str2 len is %d\n", len); 98 99 mystrcpy(str1, str2); //到这里str1已经是apple了。 100 printf("mystrcpy str1 is:%s\n", str1); 101 102 mystrcat(str1, str3); //到这里str1应该是applepie。 103 printf("mystrcat str1 is:%s\n", str1); 104 105 sign = mystrcmp(str1, str3); 106 printf("mystrcmp is:%d\n", sign); 107 108 return 0; 109 } 11