字符串函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
//
// myString.c
// 字符串函数
//
// Created by 刘晓磊 on 15/12/16.
// Copyright (c) 2015年 刘晓磊. All rights reserved.
//

#include "myString.h"

size_t myStrlen(const char * s)
{
size_t count = 0;
//参数合法性判断
if (NULL == s) {
printf("Input Param is invalid!\n");
return -1;
}

//因为字符串是以\0结尾的特殊常量,那么\0就可以作为一个结束标记
//通常对于字符串的操作都是采用while
while (*s != '\0') {
count++;
s++;
}

return count;
}

char * myStrcpy(char * dst, const char * src)
{
//需要一个指针变量,来保存dst的首地址
char * ptemp = NULL;
//参数合法性判断
if (NULL == dst || NULL == src) {
printf("Input Param is invalid!\n");
return NULL;
}

//保证传入的首地址变量里面的内容不要更改,始终保佑这个地址
ptemp = dst;
while (*src != '\0') {
*ptemp = *src;
ptemp++;
src++;
}
*ptemp = '\0';

return dst;
}

char * myStrcat(char * dst, const char * src)
{
char * ptemp = NULL;
//参数合法性判断
if (NULL == dst || NULL == src) {
printf("Input Param is invalid!\n");
return NULL;
}
ptemp = dst;

//1.找到dst的\0
while (*ptemp != '\0') {
ptemp++;
}
//找到之后,ptemp刚刚好停在'\0'的位置

while (*src != '\0') {
*ptemp = *src;
ptemp++;
src++;
}
*ptemp = '\0';

return dst;
}


int myStrcmp(const char * s1, const char * s2)
{
//参数合法性判断
if(NULL == s1 || NULL == s2) {
printf("Input param is invalid!\n");
exit(-1);
}
//找两个字符串不同的位置,以及'\0'的位置
//这里有一个条件不符合,我们都要跳出循环
while (*s1 == *s2 && *s1 != '\0' && *s2 != '\0') {
s1++;
s2++;
}

return *s1 - *s2;
}