字符串和内存函数的介绍

2021/4/20 7:29:10

本文主要是介绍字符串和内存函数的介绍,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.字符串长度

字符串和内存函数的介绍
实现方式

int my_strlen(const char a[]) {
    int i = 0, count = 0;
    while (a[i] != '\0') {
        count++;
        i++;
}
    return count;
}
int main() {
    char a[] = "abcxccxdef";
    int ret=my_strlen(a);
    printf("%d", ret);
}

字符串和内存函数的介绍

例如:我们来看一下strlen的另一个特点,它的返回值是size-t,是无符号整型,但是我们自己写的是返回的是整型。
字符串和内存函数的介绍
字符串和内存函数的介绍


字符串和内存函数的介绍
字符串和内存函数的介绍

2.strcpy字符串拷贝函数

长度不受限制的字符串函数
1.字符串拷贝函数
2.会拷贝源字符串的‘\0’;也就是会覆盖目标字符串的内容。

字符串和内存函数的介绍

实现方式

char* my_strcpy(char* a, const char* b) {
    char* ret = a;
    //判断b数组起始位置不为‘\0’;
    while (*b != '\0') {

        *a = *b;
        a++;
        b++;
    }
    //*b 这时指向‘\0’,把它拷贝到a中。
    *a = *b;
    return ret;
}
int main() {
    char a[10] = "abcdef";
    char b[] = "bcdef";
    char* ret=my_strcpy(a, b);
    printf("%s", ret);
    return 0;
}

3.strcat追加字符串函数

字符串和内存函数的介绍
实现方式

char * my_strcat(char* a, const char* b) {
    char* ret = a;
    //遍历数组a,使得a指向‘\0’;
    while (*a != '\0') {
        *a++;
    }
    //把数组b中的元素追加到a中,此时的a已经指向'\0.'
    while (*b != '\0') {
        *a = *b;
        *a++;
        *b++;
    }
    //此时的b为'\0',把它也追加到a中
    *a = *b;
    return ret;
}
int main() {
    char a[20] = "abcdef";
    char b[] = "wxl";
    char* ret=my_strcat(a, b);
    printf("%s", ret);

    return 0;
}

字符串和内存函数的介绍

4.strcmp字符串比较函数

字符串和内存函数的介绍
字符串和内存函数的介绍
实现方式

int my_strcmp(const char *a, const char *b) {
    while (*a == *b) {
        if (*a == '\0') {  //相等
            return 0;
        }
        a++;       //相等的情况下继续比较下一对字符。
        b++;

    }
         if (*a > *b) { //大于
            return 1;
        }
         else   
             return -1;  //小于

    }
int main() {
    char a[] = "abcdef";
    char b[] = "abhhhh";
    int ret = my_strcmp(a, b);
    printf("%d", ret);
    return 0;
}

字符串和内存函数的介绍

长度受限制的字符串函数介绍

1.strncpy

字符串和内存函数的介绍
字符串和内存函数的介绍

int main() {
    char a[10] = "hhahadd";
    char b[] = "abcdefghighik";
    strncpy(a, b, 5);
    printf("%s", a);
}

字符串和内存函数的介绍

注意点第二项:
字符串和内存函数的介绍

2.strncat

字符串和内存函数的介绍

字符串和内存函数的介绍

int main() {
    char arr1[30] = "abcdef";
    char arr2[] = "ghijk";
    strncat(arr1, arr2, 3);
    printf("%s", arr1);
}

字符串和内存函数的介绍
字符串和内存函数的介绍

3.strncmp

字符串和内存函数的介绍

 int main() {
    char a[] = "abcdef";
    char b[] = "abcwef";
    int ret = strncmp(a, b, 4);
    printf("%d\n", ret);
}

字符串和内存函数的介绍

字符串查找

1.strstr

字符串和内存函数的介绍
字符串和内存函数的介绍
实现方式
字符串和内存函数的介绍
字符串和内存函数的介绍

char* my_strstr(const char* a, const char* b) {
    char* p1 = (char *)a;
    char* p2 = (char * ) b;
    char* cur = (char * )a;
    while (*cur != '\0') {
        p1 = cur;  
        p2 = (char * )a;

        while ((*p1 != '\0') && (*p2 != '\0') && (*p1 == *p2)) {
            p1++;
            p2++;

        }
                cur++;
                if(*p1='\0'){        //当p1等于‘\0’时,直接终止。
                return NULL;

        if (*p2 == '\0') {
            return cur;           //当p2为'\0'的时候,直接返回cur指向的地址,进行打印;
        }

    }
    return NULL;         //没找到
}
        int main() {
            char a[] = "abbbcefg";
            char b[] = "bbc";
            char* ret = my_strstr(a, b);
            if (ret == NULL) {
                printf("字串不存在");
            }
            else {
                printf("%s", ret);
            }
        }

字符串和内存函数的介绍

2.strtok

字符串和内存函数的介绍

字符串和内存函数的介绍
字符串和内存函数的介绍

3.strerror错误信息报告

字符串和内存函数的介绍

char *str = strerror(errno);

字符串和内存函数的介绍

小写转大写

#include <ctype.h>
int main() {
    int i = 0;
    char a[] = "I Am a Student";
    while (a[i] != '\0') {
        if (isupper( a[i])) {
            a[i] = tolower(a[i]);
        }
        i++;
    }

    return 0;
}

内存操作函数

1.memcpy

字符串和内存函数的介绍

实现方式

void* my_memcpy(void* dest, const void* str, size_t num) {
    void* ret =dest;
    while (num--) {
        *(char*) dest = *(char* )str;
        ++(char *)dest;
        ++(char *)str;
    }
    return ret;
}
int main() {
    int a[] = { 1,2,3,4,5,6 };
    int b[10] = { 0 };
    my_memcpy(a, b, sizeof(a));
    return 0;
 }

字符串和内存函数的介绍

2.memove

字符串和内存函数的介绍

实现方式
字符串和内存函数的介绍

void* my_memcpy(void* dest, const void* str, size_t num) {
    void * ret = dest;
    if(dest<str){
        //从前往后
        while (num--) {
            *(char*)dest = *(char*)str;
            ++(char *)dest;
            ++(char *)str;
        }
    }
    else {
        //从后-前
        while (num--) {
            *((char *)dest + num) = *((char *)str + num);
        }
    }
    return ret;
}
int main() {
    int a[] = { 1,2,3,4,5,6,7,8,9,10 };
    my_memcpy(a+3, a, 20);
    return 0;
 }

3.memset内存设置函数

字符串和内存函数的介绍

int main() {
    char arr1[10] = "";
    memset(arr1, '#', 10);  //把arr1重置#号,数量为10个
    printf("%s", arr1);

}

4.memcmp

字符串和内存函数的介绍

int main() {
    int arr1[] = { 1,2,3,4,5,6 };
    int arr2[] = { 1,2,5,6,4,7 };
    int ret = memcmp(arr1, arr2, 8);  //比较前八个字节,也就是两个整型,1和2比较
    printf("%d", ret);
    return 0;
}


这篇关于字符串和内存函数的介绍的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程