0
点赞
收藏
分享

微信扫一扫

Elasticsearch:ES|QL 入门 - Python Notebook

认真的老去 03-22 21:30 阅读 2

1.strlen

1.1 用法

我们模拟实现第一步是不是应该先了解它的用法呢

strlen 是 C 语言标准库中的一个函数,用于计算字符串的长度(即字符个数)。它的原型定义在头文件 string.h 中。

下面是 strlen 函数的原型:

#include <string.h> size_t strlen(const char *str);

其中,str 是需要计算长度的字符串,返回值是 size_t 类型,表示字符串的长度。

strlen 函数会从字符串的开头开始遍历,直到遇到字符串结束符 \0 才停止,并返回遍历过程中统计的字符个数(不包括结束符)。

#include <stdio.h>
#include <string.h>

int main() {
   
    char str[] = "Hello, World!";
    size_t len = strlen(str);

    printf("Length of the string: %zu\n", len);

    return 0;
}

1.2 模拟实现

然我们来验证一下呗

我们实现了两个版本的strlen,其实还有一种,指针减指针的方法,就留给你们去实现喽。

2.strcpy

2.2 用法

strcpy 是 C 语言标准库中的一个函数,用于将一个字符串复制到另一个字符串中。它的原型定义在头文件 string.h 中。

下面是 strcpy 函数的原型:

#include <string.h> char *strcpy(char *dest, const char *src);

其中,dest 是目标字符串(要复制到的字符串),src 是源字符串(要被复制的字符串)。返回值是指向目标字符串 dest 的指针。

strcpy 函数会将源字符串 src 的内容复制到目标字符串 dest 中,直到遇到源字符串的结束符 \0 为止。需要注意的是,如果目标字符串 dest 不够大,无法容纳源字符串 src 的内容,可能会导致缓冲区溢出的问题。所以铁汁们,知道怎么使用了吗?

#include <stdio.h>
#include <string.h>

int main() {
    char src[] = "Hello, World!";
    char dest[20];

    strcpy(dest, src);

    printf("Original string: %s\n", src);
    printf("Copied string: %s\n", dest);

    return 0;
}

2.2模拟实现

下一个,

3.strcat

3.1 用法

strcat 是 C 语言标准库中的一个函数,用于将一个字符串追加到另一个字符串的末尾。它的原型定义在头文件 string.h 中。

下面是 strcat 函数的原型:

#include <string.h> char *strcat(char *dest, const char *src);

其中,dest 是目标字符串(要追加到的字符串),src 是源字符串(要被追加的字符串)。返回值是指向目标字符串 dest 的指针。

strcat 函数会将源字符串 src 的内容追加到目标字符串 dest 的末尾,并在追加后的字符串末尾添加结束符 \0。需要注意的是,如果目标字符串 dest 的空间不足以容纳源字符串 src 的内容,可能会导致缓冲区溢出的问题。

#include <stdio.h>
#include <string.h>

int main() {
    char dest[50] = "Hello, ";
    char src[] = "World!";

    strcat(dest, src);

    printf("Concatenated string: %s\n", dest);

    return 0;
}

3.2 模拟实现

4.strstr

4.1 用法

strstr 是 C 语言标准库中的一个函数,用于在一个字符串中查找第一次出现另一个字符串的位置。它的原型定义在头文件 string.h 中。

下面是 strstr 函数的原型:

#include <string.h> char *strstr(const char *haystack, const char *needle);

其中,haystack 是要被搜索的字符串(被搜索的字符串),needle 是要搜索的字符串(要查找的子字符串)。返回值是指向第一次匹配到的子字符串的指针,如果未找到,则返回 NULL

strstr 函数会在 haystack 字符串中查找第一次出现 needle 字符串的位置,并返回该位置的指针。如果未找到 needle 字符串,则返回 NULL

#include <stdio.h>
#include <string.h>

int main() {
    const char *haystack = "Hello, World! This is a test.";
    const char *needle = "World";

    char *result = strstr(haystack, needle);

    if (result != NULL) {
        printf("'%s' found at position: %ld\n", needle, result - haystack);
    } else {
        printf("'%s' not found in '%s'\n", needle, haystack);
    }

    return 0;
}

4.2 模拟实现

5.strncpy

5.1 用法

strncpy 是 C 语言标准库中的一个函数,用于将指定长度的字符串从源字符串复制到目标字符串中。与 strcpy 不同的是,strncpy 允许指定要复制的字符数,即使源字符串的长度超过指定的字符数。这可以避免缓冲区溢出的问题。

下面是 strncpy 函数的原型:

#include <string.h> char *strncpy(char *dest, const char *src, size_t n);

其中,dest 是目标字符串(要复制到的字符串),src 是源字符串(要被复制的字符串),n 是要复制的字符数。返回值是指向目标字符串 dest 的指针。

strncpy 函数会将源字符串 src 的最多前 n 个字符复制到目标字符串 dest 中,如果 src 的长度小于 n,则剩余的部分会用空字符 \0 进行填充;如果src 的长度大于等于 n,则只会复制 n 个字符

#include <stdio.h>
#include <string.h>

int main() {
    char src[] = "Hello, World!";
    char dest[20];

    strncpy(dest, src, 5); // 只复制前 5 个字符
    dest[5] = '\0'; // 手动添加字符串结束符

    printf("Original string: %s\n", src);
    printf("Copied string: %s\n", dest);

    return 0;
}

5.2 模拟实现

6 strncat

6.1 用法

strncat 是 C 语言标准库中的一个函数,用于将指定长度的源字符串追加到目标字符串的末尾。与 strcat 函数类似,strncat 允许指定要追加的字符数,即使源字符串的长度超过指定的字符数。这可以避免缓冲区溢出的问题。

下面是 strncat 函数的原型:

#include <string.h> char *strncat(char *dest, const char *src, size_t n);

其中,dest 是目标字符串(要追加到的字符串),src 是源字符串(要被追加的字符串),n 是要追加的字符数。返回值是指向目标字符串 dest 的指针。

strncat 函数会将源字符串 src 的最多前 n 个字符追加到目标字符串 dest 的末尾,如果 src 的长度小于 n,则只会追加 src 的全部内容;如果 src 的长度大于等于 n,则只会追加 n 个字符。

#include <stdio.h>
#include <string.h>

int main() {
    char dest[20] = "Hello, ";
    char src[] = "World!";

    strncat(dest, src, 5); // 只追加 src 的前 5 个字符

    printf("Concatenated string: %s\n", dest);

    return 0;
}

6.2 模拟实现

7. memmove

memmove 是 C 语言标准库中的一个函数,用于在内存块之间移动指定长度的数据。与 memcpy 类似,memmove 也可以用来复制一段内存区域的内容,但不同之处在于 memmove 能够处理源内存块和目标内存块有重叠的情况。

下面是 memmove 函数的原型:

#include <string.h> void *memmove(void *dest, const void *src, size_t n);

其中,dest 是目标内存块(要移动到的内存区域),src 是源内存块(要被移动的内存区域),n 是要移动的字节数。返回值是指向目标内存块 dest 的指针。

memmove 函数会将源内存块 src 中的内容移动到目标内存块 dest 中,即使这两个内存块有重叠部分也能正确执行。移动的字节数由参数 n 指定。

#include <stdio.h>
#include <string.h>

int main() {
    char str[50] = "Hello, World!";
    printf("Original string: %s\n", str);

    // 将"World!"移动到"Hello, "
    memmove(str, str + 7, 6);

    printf("After memmove: %s\n", str);

    return 0;
}

7.1 模拟实现

它的实现要考虑两种情况:

1> 因为是内存拷贝,所以一次拷贝多少比较合适

2> 在同一个数组或者字符进行拷贝的时候,覆盖的问题

当然还有几个函数是只要学会使用就可以的比如:

  • strncmp(str1, str2, n): 比较字符串 str1 和 str2 的前 n 个字符是否相等。
  • strchr(str, c): 在字符串 str 中查找字符 c 的第一次出现位置
  • memset(ptr, value, num): 将指针 ptr 指向的内存块的前 num 个字节设置为值 value

看你们有没有兴趣实现喽!

每日一问:你们知道怎么判断你的电脑是大端还是小端呢?

举报

相关推荐

0 条评论