指针小知识点:
int a =10;
int *p=&a;
int *q=p; //p中保存的是a的地址
int *q=p; //将p的值赋给q 作用是让q也指向a
strlen( ); 求字符串的长度
strcpy( ); 复制字符串
strcat( ); 连接字符串
strcmp( ); 字符串大小的比较
1 typedef unsigned
int size_t
2
3 size_t my_strlen (
const char *
str) // strlen()
4 {
5 assert(str!=
NULL);
6 int len=
0;
7 while(*str !=
'\0')
8 {
9 len++
;
10 str++
;
11 }
12 return len;
13 }
14
15 //不使用中间变量 利用递归;
16 size_t my_strlen(
const char *
str)
17 {
18 assert(str!=
NULL);
19 if (*str==
'\0')
20 return 0;
21 else
22 return my_strlen(++str)+
1;
23 }
1 char* my_strcpy(
char *dest,
const char *
src) // strcpy()
2 {
3 assert(dest!=NULL&&src!=
NULL);
4 char *dest_tmp=dest;
//保护参数
5 const char *src_tmp=src;
//类型匹配
6 while(*src_tmp!=
'\0')
7 {
8 *dest_tmp++=*src_tmp++
;
9 }
10
11 *dest_tmp=
'\0';
12 return dest;
13 }
14
15 void main()
16 {
17 char s1[
20];
18 char *s2 =
"abcde";
19 my_strcpy(s1, s2);
20 cout<<
"s1 = "<<s1<<endl;
//abcde //C++输出方式
21 }
22 // 或者第三方接受
23 void main()
24 {
25 char s1[
20];
26 char *s2 =
"abcde";
27 char *s3=
my_strcpy(s1, s2);
28 cout<<
"s3 = "<<s3<<endl;
//abcde
29 }
1 char* my_strcat(
char *dest,
const char *
src) // strcat()
2 {
3 assert(src!=NULL&&dest!=
NULL)
4 char *dest_tmp=dest;
//保护参数
5 const char *src_tmp=src;
//类型匹配
6
7 while(*dest_tmp!=
'\0')
8 dest_tmp++
;
9 while(*src_tmp!=
'\0')
10 *dest_tmp++=*src_tmp++
;
11 *dest_tmp=
'\0';
12 return dest;
13 }
14
15 void main()
16 {
17 char s1[
20] =
"abcdef ";
18 char s2[
20] =
"ghijk ";
19 char *str1 =
my_strcat(s1, s2);
20 cout<<
"s1 = "<<s1<<
endl;
21 cout<<
"str1 = "<<str1<<endl;
//abcdefghijk //C++输出方式
22
23 }
1 /* strcmp(s1,s2);
2 s1>s2 : 返回1
3 s1=s2 : 返回0
4 s1<s2 : 返回-1
5 */
6
7 int my_strcmp(
const char *str1,
const char *
str2) //strcmp()
8 {
9 assert(str1!=NULL && str2!=
NULL);
10 if(*str1==
'\0' && *str2==
'\0')
11 return 0;
12 while(*str1!=
'\0' && *str2!=
'\0')
13 {
14 if(*str1 > *
str2)
15 return 1;
16 else if(*str1 < *
str2)
17 return -
1;
18 str1++
;
19 str2++
;
20 }
21 if(*str1==
'\0' && *str2!=
'\0')
22 return -
1;
23 if(*str1!=
'\0' && *str2==
'\0')
24 return 1;
25 return 0;
26 }
27
28 // 或者
29 int my_strcmp(
const char *str1,
const char *
str2)
30 {
31 assert(str1!=NULL && str2!=
NULL);
32 int result =
0;
33 while(*str1!=
'\0' || *str2!=
'\0')
34 {
35 if( ( result = *str1-*str2 ) !=
0 )
36 break;
37 str1++
;
38 str2++
;
39 }
40 if( result >
0 )
41 result =
1;
42 else if( result <
0 )
43 result = -
1;
44 return result;
45 }
注意:
1、判断参数的有效性;
(断言) 所传的参数不能为空。
2、若需要返回指针,使用中间变量;
my_strcpy(); my_strcat();
3、确保空间足够
my_strcpy(); my_strcat();
4、参数保护 保证参数不被函数内部所修改
转载于:https://www.cnblogs.com/fmonlyg/p/6129747.html
相关资源:JAVA上百实例源码以及开源项目