四大常用字符处理函数的实现

四大常用字符处理函数的实现

写在前面

对于指针变量s,*s代表其指向的变量(声明变量时不代表),可能是整型变量a,也可能是字符变量c。s代表他本身,他是一个地址,比如,32ffcs。理解这一点,不然剩下的很难看懂。

函数中,需要把实际参数的地址赋给形参的指针变量,并根据“函数中的指针能够修改实际变量”的特点来实现函数功能,例子详见strcat函数。

strlen函数:获取字符串长度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
int mystrlen(char *s)
{
char *b = s; //这里就是让形参b得到了*s的地址,即s。
int length;
for (;*b != '\0';b++)
{
length++;
}
return length;
}



int main()
{
char x[10] = "abcdefgh";
int a;
a = mystrlen(x);
printf("%d",a);


return 0;
}

srtrcpy函数:实现字符串的复制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <string.h>

void mystrcpy(char *a, char *b) {
char temp;
temp = *b; // 先取出b指向的当前字符
while (temp!= '\0') {
*a = temp;
a++;
b++;
temp = *b; // 更新temp为下一个字符
}
*a = '\0'; // 手动添加字符串结束符到目标字符串末尾
}

int main() {
char *x = "nihaozhangzhou"; // 记得定义足够大的字符数组来存储目标字符串,避免数组越界。
char *y = "zhongguo";
mystrcpy(x, y);
puts(x);
return 0;
}

strcat函数:实现字符串连接

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
#include <stdio.h>
//字符串拼接函数 mystrcat(),在这里,假设X是32ffcs(说明*x的地址是32ffcs);那么将x的值赋给p;通过函数内指针能够修改实际参数的特点修改指定值,所以最后的return可以是p也可以是x。
char* mystrcat(char *x, char *y)
{
char *p;
char *q;
for (p = x;*p != '\0'; p++);
for (q = y;*q != '\0'; q++)
{
*p = *q;
p++;
}
*p = '\0';
return p;
}
int main()
{
char a[80]="Spring ";
char b[]= "Equinox";
mystrcat(a,b);
puts(a);




return 0;
}

strcmp:实现字符串的比较,包括长度和字符两方面。

只有长度相同,每个字符都相同时才相同,此时输出0。

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
#include <stdio.h>
int mystrcmp(char *x,char *y)
{

char *p = x;
char *q = y;
while (*p!= '\0' && *q!= '\0')
{
if (*p > *q)
{
return 1;
}
else if (*p < *q)
{
return -1;
}
p++;
q++;
}
if (*p == '\0' && *q!= '\0')
{
return -1;
}
else if (*p!= '\0' && *q == '\0')
{
return 1;
}
else
{
return 0;

}
}
int main(){
char a[] = "China";
char *b = "ChinaIlove";
int v = mystrcmp(a,b);
printf("%d",v);




return 0;
}