strlen,strcat,strcpy,strcpm 自实现

时间:2022-08-05 01:59:36
 1 #include <stdio.h>
 2 /*
 3 题目:4种字符串库函数自实现:1.mystrlen()测字符串长度  2.mystrcat()字符串链接 3.mystrcpy()字符串拷贝 4.mystrcmp()字符串比较
 4 思路:1.mystrlen()测字符串长度。测量字符串的实际长度返回一个整数值
 5       2.mystrcat()字符串链接。将第二个字符串链接到第一个字符串后面,组成一个新串,返回新串的首地址(也可不返回)。
 6       3.mystrcpy()字符串拷贝。将第二个字符串拷贝至第一个字符串中。前提是第一个字符串的长度大于第二个字符串的长度,返回新串的首地址(也可不返回)
 7       4.mystrcmp()字符串比较。两个字符串每个字符逐个比较,全部相同返回他们的差值,此时差值正好为0
 8         如果第一个字符串某一个字符比第二个字符串ascii大或者小 则返回他们的差值。大的时候差值>0 小的时候差值<0
 9 */
10 
11 //1.测字符串长度
12 int mystrlen(char *p)
13 {
14     int len = 0;
15     while(*p++)
16         len++;
17     return len;
18 }
19 //2.字符串链接
20 void mystrcat(char *p1,char *p)
21 {
22     while(*p1)p1++;
23     while(*p1++=*p++);
24 }
25 
26 //3.字符串拷贝
27 void mystrcpy(char *p1,char *p)
28 {
29     while(*p1++=*p++);
30 }
31 
32 //4.字符串比较
33 int mystrcmp(char *p1,char *p)
34 {
35     for(;*p1&&*p;p1++,p++)
36     {
37         if(*p1 == *p)
38             continue;
39         else 
40             return *p1-*p;
41     }
42     return *p1-*p;
43 }
44 int main(void)
45 {
46     char *p = "sabcdefg";
47     char p1[30] = "y1234";//字符串常量"y1234"存储在数据段的只读数据段(or)无法改变其数据,将其拷贝至字符数组中,就可以改变其数据。
48     int len = 0;
49     printf("len = %d\n",mystrlen(p));
50 
51     mystrcat(p1,p);
52     printf("p1 = %s\n",p1);
53     
54     mystrcpy(p1,p);
55     printf("p1 = %s\n",p1);
56 
57     char *p2 = "fffffeee";
58     int t = mystrcmp(p,p2);
59     printf("%d\n",t);
60     if(t>0)
61         printf("p>p2\n");
62     else if(t<0)
63         printf("p<p2\n");
64     else
65         printf("p == p2\n");
66 
67     return 0;
68 }