四大常用字符处理函数的实现
写在前面
对于指针变量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; 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; while (temp!= '\0') { *a = temp; a++; b++; temp = *b; } *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>
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; }
|