#include<stdio.h>
#include<string.h>
#include<strings.h>
void output(const char *s1) {
printf("The string is:");
printf("%s", s1);
printf("\n------------------\n");
}
//计算字符串长度函数
char my_strlen(const char *s2){
int i = 0;
while (*s2 != '\0') {
s2++;
i++;
}
printf("The length of string is:");
printf("%d\n", i);
}
//字符串比较大小函数
char my_strcmp(const char *d, const char *s) {
while (*d == *s) {
d++;
s++;
if (*d == '\0') {
return 0;
}
}
return *d > *s ? 1 : -1;
}
//任意长度字符串比较大小函数
char my_strncmp(const char *s1, const char *s2, size_t n) {
while (*s1 == *s2 && (n--) && *s1 != '\0' && *s2 != '\0') {
s1++;
s2++;
}
if ((*s1 - *s2) == 0)
return 0;
else if ((*s1 - *s2) > 0)
return 1;
else
return -1;
}
//字符串长度连接函数
char *my_strcat(char *dest, const char *src) {
int i;
int j;
for (i = 0; dest[i] != '\0'; i++) {}
for (j = 0; src[j] != '\0'; j++,i++) {
dest[i] = src[j];
}
dest[i] = '\0';
/*
* 此处连接src到指向的字符串,包括终止的空字节('\0'),连接到dest指向的缓冲区,不然dest就会丢失终止字节('\0');
* 同样适用于拷贝函数;
*/
return dest;
}
//任意字符串长度连接函数
char *my_strncat(char* dest, const char* src, size_t n) {
int i;
int j;
for (i = 0; dest[i] != '\0'; i++) {}
for (j = 0; j < n && src[j] != '\0'; j++, i++) {
dest[i] = src[j];
}
dest[i] = '\0';
return dest;
}
//字符串长度拷贝函数
char *my_strcpy(char *dest, const char *src) {
int i;
for (i = 0; src[i] != '\0'; i++) {
dest[i] = src[i];
}
dest[i] = '\0';
return dest;
}
//任意字符串长度拷贝函数
char *my_strncpy(char *dest, const char *src, size_t n) {
int i;
for (i = 0; src[i] != '\0' && i < n; i++) {
dest[i] = src[i];
}
for (; i < n; i++)
dest[i] = '\0';
return dest;
}
int main() {
const char *src = "Cai cai kun is the sleaziest!";
char dest[56] = {};
output(src);
my_strlen(src);
printf("-----------------\n");
my_strcmp(dest, src);
printf("%d\n", my_strcmp(dest, src));
printf("%d\n", strcmp(dest, src));
printf("%d\n", my_strcmp("Cai cai kun is the sleaziest!",src));
printf("%d\n", my_strcmp("Cai is the sleaziest!",src));
printf("-----------------\n");
int N = 0;
my_strncmp(dest, src, N);
printf("%d\n", my_strncmp("Cai cai is the sleaziest!", src, 3));
printf("%d\n", my_strncmp("Cai cai kun is the weakest!", src, 20));
printf("%d\n", strncmp("Cai cai kun is the weakest!", src, 20));
printf("-----------------\n");
// 字符串在比较之后有可能返回字符之间的ASCII差值
my_strcat(dest, src);
printf("Before: %s\n", src);
printf("Before: %s\n", dest);
bzero(dest, 56);
printf("After bzero: %s\n", dest);
printf("After strcat: %s\n", my_strcat(dest, "cai xu kun"));
printf("-----------------\n");
my_strncat(dest, src, N);
printf("Before: %s\n", src);
printf("Before: %s\n", dest);
bzero(dest, 56);
printf("After bzero: %s\n", dest);
printf("After strncat: %s\n", my_strncat(dest, "cai xu kun", 5));
printf("-----------------\n");
printf("Before: %s\n", src);
printf("Before: %s\n", dest);
bzero(dest, 56);
printf("After bzero: %s\n", dest);
my_strcpy(dest, src);
printf("After strcpy: %s\n", my_strcpy(dest, src));
printf("-----------------\n");
my_strncpy(dest, src, N);
printf("Before: %s\n", src);
printf("Before: %s\n", dest);
bzero(dest, 56);
printf("After bzero: %s\n", dest);
printf("After strncpy: %s\n", strncpy(dest, src, 11));
return 0;
}