C语言实现自定义字符串(长度计算、比较、连接、拷贝)等函数

该博客详细介绍了如何用C语言实现字符串的基本操作,包括计算长度、比较大小、连接和拷贝等。通过示例代码展示了my_strlen、my_strcmp、my_strncmp、my_strcat、my_strncat、my_strcpy和my_strncpy等函数的用法,并在main函数中进行了一系列测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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;

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值