C语言:字符函数和字符串函数

1.字符函数

在 C 语言中,字符分类函数主要定义在<ctype.h>头文件中,这些函数可以用来判断一个字符是否属于特定的字符类别,下面为你详细介绍一些常用的字符分类函数:

1.1 iscntrl

  • 功能:判断一个字符是否为控制字符,控制字符是 ASCII 码表中 0 - 31 以及 127 的字符,一般不显示为可见字符,用于控制设备等特定功能。
  • 原型int iscntrl(int c);,参数c为要检查的字符,其值通常为unsigned char类型或EOF
  • 返回值:若c是控制字符,返回非零值(真);否则返回 0(假)。
#include <stdio.h>
#include <ctype.h>int main() {char testChar = '\n';if (iscntrl(testChar)) {printf("%c 是控制字符\n", testChar);} else {printf("%c 不是控制字符\n", testChar);}return 0;
}

1.2 isspace

  • 功能:判断一个字符是否为空白字符,空白字符包括空格、换页符(\f)、换行符(\n)、回车符(\r)、水平制表符(\t)、垂直制表符(\v)。
  • 原型int isspace(int c);,参数c为待检查字符。
  • 返回值:若c是空白字符,返回非零值(真);否则返回 0(假)。
  • 示例代码
#include <stdio.h>
#include <ctype.h>int main() {char testChar = ' ';if (isspace(testChar)) {printf("%c 是空白字符\n", testChar);} else {printf("%c 不是空白字符\n", testChar);}return 0;
}

1.3 isdigit

  • 功能:检查一个字符是否为十进制数字(0 - 9)。
  • 原型int isdigit(int c);c为要判断的字符。
  • 返回值:如果c是 0 - 9 中的数字字符,返回非零值(真);否则返回 0(假)。
  • 示例代码
    #include <stdio.h>
    #include <ctype.h>int main() {char testChar = '5';if (isdigit(testChar)) {printf("%c 是十进制数字\n", testChar);} else {printf("%c 不是十进制数字\n", testChar);}return 0;
    }

1.4 isxdigit

  • 功能:判断一个字符是否为十六进制数字,包括 0 - 9、小写字母 a - f、大写字母 A - F。
  • 原型int isxdigit(int c);,参数c为需要检测的字符。
  • 返回值:若c是十六进制数字字符,返回非零值(真);否则返回 0(假)。
  • 示例代码
    #include <stdio.h>
    #include <ctype.h>int main() {char testChar = 'A';if (isxdigit(testChar)) {printf("%c 是十六进制数字\n", testChar);} else {printf("%c 不是十六进制数字\n", testChar);}return 0;
    }

1.5 islower

  • 功能:检测一个字符是否为小写字母(a - z)。
  • 原型int islower(int c);c是要检查的字符。
  • 返回值:如果c是小写字母,返回非零值(真);否则返回 0(假)。
  • 示例代码
    #include <stdio.h>
    #include <ctype.h>int main() {char testChar = 'b';if (islower(testChar)) {printf("%c 是小写字母\n", testChar);} else {printf("%c 不是小写字母\n", testChar);}return 0;
    }

1.6 isupper

  • 功能:判断一个字符是否为大写字母,即 A - Z。与islower类似,在进行字母大小写转换等操作时会用到。
  • 头文件#include <ctype.h>
  • 返回值:若字符是大写字母,返回非零值(真);否则返回 0(假)。
  • 示例代码
    #include <stdio.h>
    #include <ctype.h>int main() {char c1 = 'C';char c2 = 'c';printf("字符 %c 是否为大写字母: %d\n", c1, isupper(c1));printf("字符 %c 是否为大写字母: %d\n", c2, isupper(c2));return 0;
    }

1.7 isalpha

  • 功能:检测一个字符是否为字母(a - z 或 A - Z)。
  • 原型int isalpha(int c);c为待检测字符。
  • 返回值:如果c是字母,返回非零值(真);否则返回 0(假)。
  • 示例代码
  • #include <stdio.h>
    #include <ctype.h>int main() {char testChar = 'd';if (isalpha(testChar)) {printf("%c 是字母\n", testChar);} else {printf("%c 不是字母\n", testChar);}return 0;
    }

1.8 isalnum

  • 功能:判断一个字符是否为字母或数字(a - z、A - Z、0 - 9)。
  • 原型int isalnum(int c);c为要检查的字符。
  • 返回值:若c是字母或数字,返回非零值(真);否则返回 0(假)。
  • 示例代码
    #include <stdio.h>
    #include <ctype.h>int main() {char testChar = 'e';if (isalnum(testChar)) {printf("%c 是字母或数字\n", testChar);} else {printf("%c 不是字母或数字\n", testChar);}return 0;
    }

1.9  ispunct

  • 功能:检测一个字符是否为标点符号,即不属于数字或字母的可打印图形字符。
  • 原型int ispunct(int c);,参数c为要检测的字符。
  • 返回值:如果c是标点符号,返回非零值(真);否则返回 0(假)。
  • 示例代码
    #include <stdio.h>
    #include <ctype.h>int main() {char testChar = '.';if (ispunct(testChar)) {printf("%c 是标点符号\n", testChar);} else {printf("%c 不是标点符号\n", testChar);}return 0;
    }

1.10 isgraph

  • 功能:判断一个字符是否为图形字符(除空格之外的可打印字符,包含字母、数字、标点符号等)。
  • 原型int isgraph(int c);c为要判断的字符。
  • 返回值:若c是图形字符,返回非零值(真);否则返回 0(假)。
  • 示例代码
    #include <stdio.h>
    #include <ctype.h>int main() {char testChar = '!';if (isgraph(testChar)) {printf("%c 是图形字符\n", testChar);} else {printf("%c 不是图形字符\n", testChar);}return 0;
    }

1.11 isprint

  • 功能:检测一个字符是否为可打印字符(包括图形字符和空白字符)。
  • 原型int isprint(int c);c为要检查的字符。
  • 返回值:如果c是可打印字符,返回非零值(真);否则返回 0(假)。
    #include <stdio.h>
    #include <ctype.h>int main() {char testChar = 'h';if (isprint(testChar)) {printf("%c 是可打印字符\n", testChar);} else {printf("%c 不是可打印字符\n", testChar);}return 0;
    }

2. 字符转换函数 

1. tolower 和 toupper 函数

这两个函数定义在 <ctype.h> 头文件中,用于将字符在大小写之间进行转换。

函数原型

int tolower(int c); 

int toupper(int c);

1.1 tolower 函数

  • 功能:将大写字母转换为小写字母。如果传入的字符不是大写字母,则直接返回该字符本身。
  • 原型int tolower(int c);
  • 返回值:若 c 是大写字母,返回对应的小写字母;若不是大写字母,返回 c 本身。
  • 示例代码
    #include <stdio.h>
    #include <ctype.h>int main() {char ch = 'B';char lower_ch = tolower(ch);printf("'%c' 转换为小写后是 '%c'\n", ch, lower_ch);return 0;
    }

1.2. toupper 函数

  • 功能:将小写字母转换为大写字母。如果传入的字符不是小写字母,则直接返回该字符本身。
  • 原型int toupper(int c);
  • 返回值:若 c 是小写字母,返回对应的大写字母;若不是小写字母,返回 c 本身。
  • 示例代码
    #include <stdio.h>
    #include <ctype.h>int main() {char ch = 'd';char upper_ch = toupper(ch);printf("'%c' 转换为大写后是 '%c'\n", ch, upper_ch);return 0;
    }

2. atoiatol 和 atof 函数

这些函数定义在 <stdlib.h> 头文件中,用于将字符串转换为整数、长整数和浮点数。

函数原型

int atoi(const char *nptr); 

long atol(const char *nptr); 

double atof(const char *nptr);

2.1 atoi 函数

  • 功能:将字符串转换为整数。它会忽略字符串开头的空白字符,然后将连续的数字字符转换为对应的整数值。遇到非数字字符则停止转换。
  • 原型int atoi(const char *nptr);
  • 返回值:返回转换后的整数值。如果字符串不能转换为有效的整数,则返回 0。
  • 示例代码
    #include <stdio.h>
    #include <stdlib.h>int main() {char str[] = "1234";int num = atoi(str);printf("字符串 '%s' 转换为整数是 %d\n", str, num);return 0;
    }

2.2 atol 函数

  • 功能:将字符串转换为长整数。同样会忽略字符串开头的空白字符,把连续数字字符转换为长整数值,遇到非数字字符停止转换。
  • 原型long atol(const char *nptr);
  • 返回值:返回转换后的长整数值。若字符串无法转换为有效的长整数,则返回 0。
  • 示例代码
    #include <stdio.h>
    #include <stdlib.h>int main() {char str[] = "567890";long num = atol(str);printf("字符串 '%s' 转换为长整数是 %ld\n", str, num);return 0;
    }

2.3 atof 函数

  • 功能:将字符串转换为双精度浮点数。忽略字符串开头的空白字符,把符合浮点数格式的连续字符转换为双精度浮点数,遇到不符合格式的字符停止转换。
  • 原型double atof(const char *nptr);
  • 返回值:返回转换后的双精度浮点数值。若字符串不能转换为有效的浮点数,则返回 0.0。
  • 示例代码
    #include <stdio.h>
    #include <stdlib.h>int main() {char str[] = "3.14159";double num = atof(str);printf("字符串 '%s' 转换为浮点数是 %f\n", str, num);return 0;
    }

3. sprintf 和 snprintf 函数

这两个函数定义在 <stdio.h> 头文件中,用于将格式化的数据写入字符串。

函数原型

int sprintf(char *str, const char *format, ...);

int snprintf(char *str, size_t size, const char *format, ...);

3.1 sprintf 函数

  • 功能:将格式化的数据写入字符串。按照指定的格式将数据组合成一个字符串,并存储到指定的字符数组中。
  • 原型int sprintf(char *str, const char *format, ...);
  • 返回值:返回写入字符串的字符数(不包括终止的空字符 '\0')。如果发生错误,返回负数。
  • 示例代码
#include <stdio.h>int main() {char str[50];int num = 20;sprintf(str, "数字是 %d", num);printf("格式化后的字符串: %s\n", str);return 0;
}

3.2 snprintf 函数

  • 功能:将格式化的数据写入字符串,同时可以指定缓冲区的大小,避免缓冲区溢出。当写入的字符数超过缓冲区大小时,会截断数据。
  • 原型int snprintf(char *str, size_t size, const char *format, ...);
  • 返回值:如果返回值为非负且小于 size,表示实际写入的字符数(不包括终止的空字符);如果返回值大于等于 size,表示需要的缓冲区大小(不包括终止的空字符)。
  • 示例代码
    #include <stdio.h>int main() {char str[20];int num = 12345;int result = snprintf(str, sizeof(str), "数字是 %d", num);printf("格式化后的字符串: %s\n", str);printf("实际需要的字符数(不包括空字符): %d\n", result);return 0;
    }

4. strtolstrtoul 和 strtod 函数

这些函数定义在 <stdlib.h> 头文件中,用于将字符串转换为长整数、无符号长整数和双精度浮点数,并且可以处理不同进制的输入。

函数原型

long strtol(const char *nptr, char **endptr, int base); 

unsigned long strtoul(const char *nptr, char **endptr, int base); 

double strtod(const char *nptr, char **endptr);

4.1 strtol 函数
  • 功能:将字符串转换为长整数,可以处理不同进制(如二进制、八进制、十六进制等)的输入。忽略字符串开头的空白字符,遇到非数字字符或超出指定进制范围的字符停止转换。
  • 原型long strtol(const char *nptr, char **endptr, int base);
  • 返回值:返回转换后的长整数值。如果字符串不能转换为有效的长整数,则返回 0。endptr 指向转换结束后的第一个字符。
  • 示例代码
    #include <stdio.h>
    #include <stdlib.h>int main() {char str[] = "1010";char *endptr;long num = strtol(str, &endptr, 2);printf("二进制字符串 '%s' 转换为长整数是 %ld\n", str, num);printf("转换结束后的位置: %s\n", endptr);return 0;
    }
4.2 strtoul 函数
  • 功能:将字符串转换为无符号长整数,支持不同进制的输入。忽略字符串开头的空白字符,遇到不符合要求的字符停止转换。
  • 原型unsigned long strtoul(const char *nptr, char **endptr, int base);
  • 返回值:返回转换后的无符号长整数值。若字符串无法转换为有效的无符号长整数,则返回 0。endptr 指向转换结束后的第一个字符。
  • 示例代码
    #include <stdio.h>
    #include <stdlib.h>int main() {char str[] = "FF";char *endptr;unsigned long num = strtoul(str, &endptr, 16);printf("十六进制字符串 '%s' 转换为无符号长整数是 %lu\n", str, num);printf("转换结束后的位置: %s\n", endptr);return 0;
    }
    4.3 strtod 函数
  • 功能:将字符串转换为双精度浮点数。忽略字符串开头的空白字符,遇到不符合浮点数格式的字符停止转换。
  • 原型double strtod(const char *nptr, char **endptr);
  • 返回值:返回转换后的双精度浮点数值。若字符串不能转换为有效的浮点数,则返回 0.0。endptr 指向转换结束后的第一个字符。
    • 示例代码
      #include <stdio.h>
      #include <stdlib.h>int main() {char str[] = "3.14abc";char *endptr;double num = strtod(str, &endptr);printf("字符串 '%s' 转换为浮点数是 %f\n", str, num);printf("转换结束后的位置: %s\n", endptr);return 0;
      }

总结:
  • C 语言字符转换函数可分三类:
  • 大小写转换<ctype.h>里的tolower转大写为小写,toupper转小写为大写。
  • 字符串转数值<stdlib.h>中的atoiatolatof简单转换字符串为对应数值;strtolstrtoulstrtod能处理不同进制或更复杂的转换,且可指示转换结束位置。
  • 格式化转换<stdio.h>sprintf按格式将数据写入字符串,snprintf能指定缓冲区大小防溢出。

3. 字符串处理函数

以下会讲解一些比较常用的字符串函数

1. strlen

  • 功能:计算字符串的实际长度,即字符串中字符的数量,不包含字符串结束符 '\0'
  • 原型size_t strlen(const char *s);
  • 返回值:返回一个 size_t 类型的值,表示字符串的长度。size_t 是无符号整数类型,通常用于表示对象的大小。
  • 示例代码
    #include <stdio.h>
    #include <string.h>int main() {char str[] = "C Programming";size_t length = strlen(str);printf("字符串 \"%s\" 的长度是 %zu\n", str, length);return 0;
    }

2. strcpy

  • 功能:将源字符串复制到目标字符串,包含字符串结束符 '\0'。需要确保目标字符串有足够的空间来存储源字符串。
  • 原型char *strcpy(char *dest, const char *src);
  • 返回值:返回指向目标字符串 dest 的指针。
  • 示例代码
    #include <stdio.h>
    #include <string.h>int main() {char src[] = "Example";char dest[20];strcpy(dest, src);printf("复制后的字符串是: %s\n", dest);return 0;
    }

    3. strcat

  • 功能:把源字符串追加到目标字符串的末尾,覆盖目标字符串原来的结束符 '\0',并在新字符串末尾添加结束符 '\0'。目标字符串要有足够的空间容纳追加后的内容。
  • 原型char *strcat(char *dest, const char *src);
  • 返回值:返回指向目标字符串 dest 的指针。
  • 示例代码
    #include <stdio.h>
    #include <string.h>int main() {char dest[20] = "Hello";char src[] = " World";strcat(dest, src);printf("追加后的字符串是: %s\n", dest);return 0;
    }

    4. strcmp

  • 功能:比较两个字符串的大小,通过比较字符串中对应位置字符的 ASCII 码值,逐个字符进行比较,直到遇到不同字符或字符串结束符 '\0'
  • 原型int strcmp(const char *s1, const char *s2);
  • 返回值
    • 若 s1 小于 s2,返回一个负整数。
    • 若 s1 等于 s2,返回 0。
    • 若 s1 大于 s2,返回一个正整数。
#include <stdio.h>
#include <string.h>int main() {char str1[] = "apple";char str2[] = "banana";int result = strcmp(str1, str2);if (result < 0) {printf("\"%s\" 小于 \"%s\"\n", str1, str2);} else if (result == 0) {printf("\"%s\" 等于 \"%s\"\n", str1, str2);} else {printf("\"%s\" 大于 \"%s\"\n", str1, str2);}return 0;
}

5. strncpy

  • 功能:从源字符串复制最多 n 个字符到目标字符串。若源字符串长度小于 n,用 '\0' 填充目标字符串至 n 个字符;若源字符串长度大于等于 n,不会自动添加结束符 '\0'
  • 原型char *strncpy(char *dest, const char *src, size_t n);
  • 返回值:返回指向目标字符串 dest 的指针。
  • 示例代码
    #include <stdio.h>
    #include <string.h>int main() {char src[] = "abcdef";char dest[5];strncpy(dest, src, 4);dest[4] = '\0';  // 手动添加结束符printf("复制后的字符串是: %s\n", dest);return 0;
    }

    6. strncat

  • 功能:将源字符串的最多 n 个字符追加到目标字符串末尾,追加完成后会在新字符串末尾添加结束符 '\0'。目标字符串要预留足够空间。
  • 原型char *strncat(char *dest, const char *src, size_t n);
  • 返回值:返回指向目标字符串 dest 的指针。
    • 示例代码
      #include <stdio.h>
      #include <string.h>int main() {char dest[20] = "Hello";char src[] = ", World!";strncat(dest, src, 3);printf("追加后的字符串是: %s\n", dest);return 0;
      }

      7. strncmp

    • 功能:比较两个字符串的前 n 个字符的大小,按字符的 ASCII 码值逐个字符比较。
    • 原型int strncmp(const char *s1, const char *s2, size_t n);
    • 返回值
      • 若前 n 个字符中 s1 小于 s2,返回一个负整数。
      • 若前 n 个字符中 s1 等于 s2,返回 0。
      • 若前 n 个字符中 s1 大于 s2,返回一个正整数。
    • 示例代码
      #include <stdio.h>
      #include <string.h>int main() {char str1[] = "apple";char str2[] = "apricot";int result = strncmp(str1, str2, 2);if (result < 0) {printf("前2个字符中,\"%s\" 小于 \"%s\"\n", str1, str2);} else if (result == 0) {printf("前2个字符中,\"%s\" 等于 \"%s\"\n", str1, str2);} else {printf("前2个字符中,\"%s\" 大于 \"%s\"\n", str1, str2);}return 0;
      }

      8. strstr

    • 功能:在主字符串中查找子字符串第一次出现的位置。
    • 原型char *strstr(const char *haystack, const char *needle);
    • 返回值:若找到子字符串,返回指向该子字符串在主字符串中首次出现位置的指针;若未找到,返回 NULL
    • 示例代码
      #include <stdio.h>
      #include <string.h>int main() {char haystack[] = "Hello, World!";char needle[] = "World";char *result = strstr(haystack, needle);if (result != NULL) {printf("找到子字符串 \"%s\",位置是 %ld\n", needle, result - haystack);} else {printf("未找到子字符串 \"%s\"\n", needle);}return 0;
      }

      9. strtok

    • 功能:将字符串按指定的分隔符分割成多个标记(token)。第一次调用时传入要分割的字符串,后续调用传入 NULL 以继续分割同一个字符串。
    • 原型char *strtok(char *str, const char *delim);
    • 返回值:返回指向下一个标记的指针;若没有更多标记,返回 NULL
    • 示例代码
      #include <stdio.h>
      #include <string.h>int main() {char str[] = "apple,banana,orange";char *token = strtok(str, ",");while (token != NULL) {printf("%s\n", token);token = strtok(NULL, ",");}return 0;
      }

      10. strerror

    • 功能:根据错误码返回对应的错误信息字符串。错误码通常是全局变量 errno 的值。
    • 原型char *strerror(int errnum);
    • 返回值:返回指向描述错误信息的字符串的指针。
    • 示例代码
      #include <stdio.h>
      #include <string.h>
      #include <errno.h>int main() {FILE *fp = fopen("nonexistent_file.txt", "r");if (fp == NULL) {printf("打开文件失败,错误信息: %s\n", strerror(errno));}return 0;
      }

      总结:

    • 使用风险和注意事项
    • 这些函数均是 C 语言标准库 <string.h>strerror 也可能涉及 <errno.h>) 提供的用于字符串处理的实用工具,下面从功能、使用风险和注意事项方面进行总结:

      功能

    • 缓冲区溢出strcpy 和 strcat 若目标缓冲区空间不足,会导致数据越界覆盖相邻内存,引发程序崩溃或安全漏洞。strncpy 和 strncat 虽可指定复制或追加长度,但使用 strncpy 时若不手动添加结束符,可能造成后续处理错误。
    • 空指针问题:使用这些函数时,传入空指针(NULL)可能导致程序崩溃。调用前需确保指针有效。
    • 线程安全strtok 函数不是线程安全的,因为它使用了静态变量来保存分割状态。若在多线程环境下使用,需使用线程安全版本(如 strtok_r)。

                             通过以上的深刻认识到你们是否可以模拟类似这些的函数嘞

                                                     欢迎大家可以一起探讨一下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/24359.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全域旅游景区导览系统:赋能智慧旅游生态,破解行业核心难题

全域旅游景区导览系统&#xff1a;赋能智慧旅游生态&#xff0c;破解行业核心难题 ——整合旅游商城、非遗文化与全域服务的一站式解决方案 一、行业痛点&#xff1a;传统旅游服务模式的局限性 随着旅游业从单一景区游览向“全域旅游”转型&#xff0c;传统服务模式暴露出诸多…

SQL笔记#集合运算

目录 一、表的加减法 1、什么是集合运算 2、表的加法——UNION 3、集合运算的注意事项 4、包含重复行的集合运算——ALL运算 5、选取表中公共部分——INTERSECT 6、记录的减法——EXCEPT 二、联结(以列为单位对表进行联结) 1、什么是联结(JOIN) 2、内联结——INSER…

基于C++“简单且有效”的“数据库连接池”

前言 数据库连接池在开发中应该是很常用的一个组件&#xff0c;他可以很好的节省连接数据库的时间开销&#xff1b;本文基使用C实现了一个简单的数据库连接池&#xff0c;代码量只有400行只有&#xff0c;但是压力测试效果很好&#xff1b;欢迎收藏 关注&#xff0c;本人将会…

如何通过提示词更好地利用AI

如何通过提示词工程释放AI的全部潜力&#xff1a;7个深度优化技巧 前言&#xff1a;为什么提示词决定AI的输出质量&#xff1f; 在人工智能对话系统的使用中&#xff0c;提示词&#xff08;Prompt&#xff09;就像开启宝藏的密码钥匙。研究表明&#xff0c;优化后的提示词可使…

【C语言】指针笔试题

前言&#xff1a;上期我们介绍了sizeof与strlen的辨析以及sizeof&#xff0c;strlen相关的一些笔试题&#xff0c;这期我们主要来讲指针运算相关的一些笔试题&#xff0c;以此来巩固我们之前所学的指针运算&#xff01; 文章目录 一&#xff0c;指针笔试题1&#xff0c;题目一…

电子科技大学考研复习经验分享

电子科技大学考研复习经验分享 本人情况&#xff1a;本科就读于电科软院&#xff0c;24年2月开始了解考研&#xff0c;24年3月开始数学&#xff0c;9月决定考本院&#xff08;开始全天候图书馆学习&#xff09;并开始专业课学习&#xff0c;11月底开始政治学习&#xff0c;最后…

c#笔记-基础知识

目录 整数 浮点 decimal bool 引用 object string 值 枚举 关键字 enum 类型转换 隐式转换 ​编辑 显式转换 装箱&#xff0c;拆箱 常量 表达式 ​编辑 字符串的使用 比较字符串 字符格式化 ​编辑 截取字符串 字符串的分割 插入字符串 删除字符串 …

表单制作代码,登录动画背景前端模板

炫酷动效登录页 引言 在网页设计中,按钮是用户交互的重要元素之一。一个炫酷的按钮特效不仅能提升用户体验,还能为网页增添独特的视觉吸引力。今天,我们将通过CSS来实现一个“表单制作代码,登录动画背景前端模板”。该素材呈现了数据符号排版显示出人形的动画效果,新颖有…

基于Hadoop的汽车大数据分析系统设计与实现【爬虫、数据预处理、MapReduce、echarts、Flask】

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 项目介绍爬虫数据概览HIve表设计Cars Database Tables 1. cars_data2. annual_sales_volume3. brand_sales_volume4. city_sales_volume5. sales_volume_by_year_and_brand6. sales_distri…

C++和OpenGL实现3D游戏编程【连载23】——几何着色器和法线可视化

欢迎来到zhooyu的C++和OpenGL游戏专栏,专栏连载的所有精彩内容目录详见下边链接: 🔥C++和OpenGL实现3D游戏编程【总览】 1、本节实现的内容 上一节课,我们在Blend软件中导出经纬球模型时,遇到了经纬球法线导致我们在游戏中模型光照显示问题,我们在Blender软件中可以通过…

SOME/IP-SD -- 协议英文原文讲解2

前言 SOME/IP协议越来越多的用于汽车电子行业中&#xff0c;关于协议详细完全的中文资料却没有&#xff0c;所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块&#xff1a; 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 5.1.2.2 S…

C++复习专题——泛型编程(模版),包括模版的全特化和偏特化

1.泛型编程 在未接触模版前&#xff0c;如果我们想实现一个通用的交换函数&#xff0c;那么我们可以通过函数重载来实现 void Swap(int &x,int &y) {int z x;x y;y z; } void Swap(float &x,float &y) {int z x;x y;y z; } void Swap(double &x,dou…

Docker入门

注意&#xff1a; 本文内容于 2025-02-23 01:18:58 创建&#xff0c;可能不会在此平台上进行更新。如果您希望查看最新版本或更多相关内容&#xff0c;请访问原文地址&#xff1a;Docker入门。感谢您的关注与支持&#xff01; 在日常开发中&#xff0c;其实我这里是没有使用 D…

haproxy基本配置详解

一、haproxy基础配置 官方文档&#xff1a;HAProxy version 2.2.22 - Configuration Manual HAProxy 的配置文件haproxy.cfg由两大部分组成&#xff0c;分别是global和proxies部分。 global&#xff1a;全局配置段 进程及安全配置相关的参数性能调整相关参数Debug参数 pro…

nodejs:express + js-mdict 作为后端,vue 3 + vite 作为前端,在线查询英汉词典

向 doubao.com/chat/ 提问&#xff1a; node.js js-mdict 作为后端&#xff0c;vue 3 vite 作为前端&#xff0c;编写在线查询英汉词典 后端部分&#xff08;express js-mdict &#xff09; 1. 项目结构 首先&#xff0c;创建一个项目目录&#xff0c;结构如下&#xff1…

网络原理--TCP的特性

TCP报文的结构&#xff1a; TCP的报头前20字节是固定长度&#xff0c;也可以通过“选项”来增加。 一、用来确保可靠性&#xff0c;最核心的机制&#xff0c;称为“确认应答” 引入一个情景&#xff1a; A向B询问cat和dog的意思&#xff1a; 这种情况是理想情况&#xff0c;…

Java 大视界 -- 深度洞察 Java 大数据安全多方计算的前沿趋势与应用革新(52)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

【HTML— 快速入门】HTML 基础

准备工作 vscode下载 百度网盘 Subline Text 下载 Sublime Text下载 百度网盘 vscode 下载 Sublime Text 是一款轻量好用的文本编辑器&#xff0c;我们在写前端代码时&#xff0c;使用 Sublime Text 打开比使用记事本打开&#xff0c;得到的代码体验更好&#xff0c;比 vscode…

深圳南柯电子|医疗设备EMC测试整改检测:零到一,保障医疗安全

在当今医疗科技飞速发展的时代&#xff0c;医疗设备的电磁兼容性&#xff08;EMC&#xff09;已成为确保其安全、有效运行的关键要素之一。EMC测试整改检测不仅关乎设备的性能稳定性&#xff0c;更是保障患者安全、避免电磁干扰引发医疗事故的重要措施。 一、医疗设备EMC测试整…

Tomcat安装与环境变量配置(图文详解)

一、前置条件 tomcat依赖java环境&#xff0c;需要先安装java环境。 jdk环境变量配置可参考&#xff1a;win7、win10系统JDK环境变量配置-CSDN博客 二、Tomcat的下载与安装 1.进入Tomcat官网&#xff1a; https://tomcat.apache.org/ 2.在该网页左侧栏红框标记的download…