字符串相关函数和文件操作

文章目录

        • 1. C/C++ 字符串概述
          • 1.1 字符串常量
          • 1.2 字符数组
        • 2. 字符串函数
          • 2.1 拷贝赋值功能相关函数(覆盖)
            • 2.1.1 strcpy
            • 2.1.2 strncpy
            • 2.1.3 memcpy
            • 2.1.4 memmove
            • 2.1.5 memset
            • 2.1.6 注意小点
            • 2.1.7 【函数区别】
          • 2.2 追加功能相关函数
            • 2.2.1 strcat
            • 2.2.2 strncat
            • 2.2.3 注意小点
          • 2.3 比较功能相关函数
            • 2.3.1 strcmp
            • 2.3.2 strncmp
            • 2.3.3 memcmp
            • 2.3.4 注意小点
            • 2.3.5 【函数区别】
          • 2.4 找目标字符或者字符串功能相关函数
            • 2.4.1 strchr
            • 2.4.2 strrchr
            • 2.4.3 memchr
            • 2.4.4 strstr
            • 2.4.5 注意小点
          • 2.5 计算字符串长度函数
            • 2.5.1 strlen
          • 2.6 截取字符函数
            • 2.6.1 strtok
        • 3. 字符串相关函数例子
        • 4. 文件操作
          • 4.1 文件操作写入到数据文件中
          • 4.2 文件操作读取数据到程序中

1. C/C++ 字符串概述
1.1 字符串常量
  • 格式要求:

    采用英文双引号包含的所有内容,C/C++ 语言规定,字符串常量都存在一个 ‘\0’ 结尾

  • 特点:

    字符串常量是常量,意味着它们在程序执行期间不能被修改。

  • 在内存的【数据区】,在程序中存储字符串是存储的字符串所处内存的空间首地址,用 char * 存储对应的首地址。

"ABCDEFG" 占用字节为 8 个字节!!!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main(int argc, char const *argv[])
{printf("字符串占用字节数: %ld\n", sizeof("ABCDEFG"));    /*str 可以存储字符串常量在内存【数据区】的空间首地址同时也是当前字符串下标为 0 的元素空间首地址。*/char * str = "1234567890";printf("str : %s\n", str);printf("%p\n", "1234567890");printf("&str[5] : %s\n", &str[5]);printf("*str : %c\n", *str);printf("str[5] : %c\n", str[5]);printf("\"1234567890\"[5] : %c\n", "1234567890"[5]);return 0;
}
1.2 字符数组
  • 格式要求:

    字符数组是一组按顺序存储的字符,使用字符数组可以存储字符串。

    例如:char strArray[] = {'H', 'e', 'l', 'l', 'o', '\0'}; 或者 char strArray[] = "Hello";

  • 特点:字符数组是可变的,可以在程序执行期间修改其中的元素

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main(int argc, char const *argv[])
{char arr1[4] = {'a', 'b', 'c', '\0'};/*arr1 数组名数据类型为 char * 是当前字符数组空间首地址,同时也是数组中下标为 0 的元素空间首地址。可以将一个符合 C/C++ 规范的字符数组当做一个字符串【变量】操作。C/C++ 规范要求末尾必须有 \0*/printf("arr1 = %s\n", arr1);printf("arr1 = %p\n", arr1);printf("arr1[1] = %c\n", arr1[1]);arr1[1] = 'P';printf("arr1 = %s\n", arr1);char *str = "ABC";str[1] = 'p'; // 段错误!!!字符串常量无法修改printf("str = %s\n", str);return 0;
}
2. 字符串函数

【注意】

  • 字符串是一个常量,数据内容无法修改,地址无法修改
  • 字符串函数操作请注意【内存空间问题】
  • 字符串函数,注意其返回值类型
2.1 拷贝赋值功能相关函数(覆盖)
2.1.1 strcpy
  • 格式

    char * strcpy(char * dest, const char * src)
    
  • 作用

    src 指向得字符串内容,拷贝到 dest 字符数据空间中。

2.1.2 strncpy
  • 格式

    char *strncpy(char *dest, const char *src, size_t n)
    
  • 作用

    src 指向得字符串内容,拷贝到 dest 字符数据空间中,最多复制 n 个字符

2.1.3 memcpy
  • 格式

    void *memcpy(void *dest, const void *src, size_t n)
    
  • 作用

    src 复制 n 个字符到 dest 中。

2.1.4 memmove
  • 格式

    void * memmove(void * dest, const void *src, size_t n)
    
  • 作用

    src 复制 n 个字符到 dest 的函数。

2.1.5 memset
  • 格式

    void * memset(void * str, int c, size_t n)
    
  • 作用

    复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。

2.1.6 注意小点
  1. src 可以是字符串常量,也可以是字符数组
  2. dest 必须是可以存储字符数据的内存空间,一般是字符数组或者动态申请内存字符空间,而且空间要求足够使用。
  3. 返回值是 dest 对应的空间地址。
  4. 拷贝函数使用时,如果指定的 n 个字节数不包含 src 字符串的最后一位 '\0' 时,需要手动添加 '\0' 来截断字符串,否则 dest字符串会继续有后续的数据内容
  5. memcpymemmove 功能和 strncpy 一致,memmove 可以更好的保护拷贝源数据 src【墙裂推荐】使用memmove,不会导致内存数据丢失
2.1.7 【函数区别】
  1. 用途
    • memcmp: 通常用于比较两个内存区域的字节,不仅仅局限于字符串。
    • strncmp: 主要用于比较字符串的前 n 个字符。
  2. 参数:
    • memcmp: 接受三个参数,分别是两个内存区域的起始地址和要比较的字节数。
    • strncmp: 接受三个参数,分别是两个字符串的起始地址和要比较的字符数。
  3. 返回值:
    • memcmp: 返回一个整数,如果两个内存区域相等,则返回0;如果第一个不等于第二个,返回第一个不等于第二个的字节的差值。
    • strncmp: 返回一个整数,如果两个字符串相等,则返回0;如果第一个不等于第二个,返回第一个不等于第二个字符的 ASCII 码差值。
  4. 比较方式:
    • memcmp: 按字节比较,不考虑字符的含义。
    • strncmp: 按字符比较,可以根据字符的字典序进行比较。
  5. 比较长度:
    • memcmp: 需要明确指定要比较的字节数,没有考虑字符串的长度。
    • strncmp: 需要明确指定要比较的字符数,但会在达到指定字符数或遇到字符串结束符 ‘\0’ 时停止比较。
      • strcnpy 用于复制字符串,但相比于 strcpy , 它可以指定要复制的最大字符数,避免缓冲区溢出。他会复制指定数量字符,或者直到遇到字符串结束符 '\0'
      • memcpy用于复制任何内存块的内容,不局限于字符串
  6. 字符串结束符
    • strncpy 会在达到指定的复制字符数或遇到 src 字符串的结束符 '\0' 时停止
    • memcpy 不关心内存块中是否包含结束符,它只是简单地按字节进行复制
  7. 补零操作
    • strncpy 在达到指定的字符数之前,如果遇到 src 字符串的结束符,会用零填充剩余空间,以确保目标字符串总长度为指定值
    • memcpy 不会自动在目标内存块的末尾添加零

使用场景取决于需求。如果需要比较两个字节数组,不考虑其是否为字符串,使用 memcmp。如果明确在比较字符串,且希望控制比较的字符数,使用 strncmp

2.2 追加功能相关函数
2.2.1 strcat
  • 格式

    char * strcat(char * dest, const char * src)
    
  • 作用

    src 所指向的字符串追加到 dest 所指向的字符串的结尾

2.2.2 strncat
  • 格式

    char * strncat(char * dest, const char * src, size_t n)
    
  • 作用

    src 所指向的字符串追加到 dest 所指向的字符串结尾,直到 n 字符长度或者 '\0' 为止、

2.2.3 注意小点
  1. 字符串末尾标记 '\0'
  2. 返回值数据类型为 char * ,返回内容是 dest 对应的空间地址
  3. dest 必须有对应内存空间
  4. 返回值是 dest 对应的空间地址。
2.3 比较功能相关函数
2.3.1 strcmp
  • 格式

    int strcmp(const char * str1, const char * str2)
    
  • 作用

    str1 所指向的字符串和 str2 所指向的字符串进行比较。

2.3.2 strncmp
  • 格式

    int strncmp(const char * str1, const char * str2, size_t n)
    
  • 作用

    str1str2 进行比较,最多比较的是前 n 个字符。

2.3.3 memcmp
  • 格式

    int memcmp(const void * str1, const void * str2, size_t n)
    
  • 作用

    str1str2 的前 n 个字节进行比较。

2.3.4 注意小点
  1. 如果返回值 < 0,则表示 str1 小于 str2。
  2. 如果返回值 > 0,则表示 str1 大于 str2。
  3. 如果返回值 = 0,则表示 str1 等于 str2。
  4. memcmp 使用时比较的是字节
2.3.5 【函数区别】
  1. 用途:
    • memcmp: 通常用于比较两个内存区域的字节,不仅仅局限于字符串。
    • strncmp: 主要用于比较字符串的前 n 个字符。
  2. 参数:
    • memcmp: 接受三个参数,分别是两个内存区域的起始地址和要比较的字节数。
    • strncmp: 接受三个参数,分别是两个字符串的起始地址和要比较的字符数。
  3. 返回值:
    • memcmp: 返回一个整数,如果两个内存区域相等,则返回0;如果第一个不等于第二个,返回第一个不等于第二个的字节的差值。
    • strncmp: 返回一个整数,如果两个字符串相等,则返回0;如果第一个不等于第二个,返回第一个不等于第二个字符的 ASCII 码差值。
  4. 比较方式:
    • memcmp: 按字节比较,不考虑字符的含义。
    • strncmp: 按字符比较。
  5. 比较长度:
    • memcmp: 需要明确指定要比较的字节数,没有考虑字符串的长度。
    • strncmp: 需要明确指定要比较的字符数,但会在达到指定字符数或遇到字符串结束符 ‘\0’ 时停止比较。

使用场景取决于需求。如果需要比较两个字节数组,不考虑其是否为字符串,更倾向于使用 memcmp。如果明确在比较字符串,且希望控制比较的字符数,更倾向于使用 strncmp

2.4 找目标字符或者字符串功能相关函数
2.4.1 strchr
  • 格式

    char * strchr(const char * str, int c)
    
  • 作用

    在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。

2.4.2 strrchr
  • 格式

    char * strrchr(const char * str, int c)
    
  • 作用

    在参数 str 所指向的字符串中搜索最后一次出现字符 c(一个无符号字符)的位置。

2.4.3 memchr
  • 格式

    void *memchr(const void * str, int c, size_t n)
    
  • 作用

    在参数 str 所指向的字符串的前 n 个字节中搜索第一次出现字符 c(一个无符号字符)的位置。

2.4.4 strstr
  • 格式

    char * strstr(const char * haystack, const char * needle)
    
  • 作用

    在字符串 haystack 中查找第一次出现字符串 needle(不包含空结束字符)的位置。

2.4.5 注意小点
  • strchr strrchr strstr 函数成功找到时,返回一个目标字符 c 的位置的指针,如果未找到返回一个空指针 NULL

  • 【扩展】在C语言中,strchr 函数的参数 c 被声明为 int 类型而不是 char 类型的原因与函数的设计和历史原因有关。

    1. 返回值的灵活性:

      strchr函数的返回类型是char *,即一个字符指针。返回指向字符的指针时,可以使用NULL 表示未找到字符,而不使用一个特定的字符值(比如-1 )。如果c被声明为char,则无法用NULL表示未找到。

    2. 兼容性:

      C语言的早期版本中,EOF 被定义为-1 ,而不是char类型的字符。如果c被声明为char ,则可能会导致类型不匹配的问题。将c声明为int可以确保与EOF的比较正常工作。

    3. 字符扩展:

      char类型在一些系统中可能是有符号的, 而在另一些系统中可能是无符号的。使用int 可以确保适应所有字符,包括unsigned char 的情况。虽然在实际使用中,通常将c视为字符,但将其声明为int 是为了保证更好的兼容性和一致性。

2.5 计算字符串长度函数
2.5.1 strlen
  • 格式

    size_t strlen(const char * str)
    
  • 作用

    计算字符串长度,直到空结束字符,但不包括空结束字符。

2.6 截取字符函数
2.6.1 strtok
  • 格式

    char *strtok(char *str, const char *delim)
    
  • 作用

    分解字符串 str 为一组字符串,delim 为分隔符。

3. 字符串相关函数例子
#include <stdio.h>
#include <string.h>
#include <stdlib.h>int main(int argc, char const *argv[])
{// 字符串常量,字符串常量无法修改char *str = "1234567890";// 字符串打印printf("str : %s\n", str);// 字符串首地址printf("str : %p\n", str);// 从第五个字符开始打印 printf("&str[4] : %s\n", &str[4]);  // &str[4] : 567890// 下标为 0 的字符printf(" *str : %c\n", *str);   // *str : 1// 下标为 4 对应的字符printf("str[4] :  %c\n", str[4]);   // str[4] :  5// "1234567890"这个字符串中下标为 5 的字符printf("\"1234567890\"[5] : %c\n", "1234567890"[5]);    // "1234567890"[5] : 6// 字符数组char arr[20] = {'a', 'b', 'c', '\0'};printf("---------------------\n");/*字符串拷贝函数格式:char *strcpy(char *dest, const char *src);将 src 指向的字符串内容,拷贝到 dest 字符数据空间中char *strncpy(char *dest, const char *src, size_t n);将 src 指向的字符串内容,拷贝到 dest 字符数据空间中,最多复制 n 个字符void * memcpy(void * dest, const void *src, size_t n);从 src 复制 n 个字符到 dest。void * memmove(void *dest, const void *src, size_t n);另一个用于从 src 复制 n 个字符到 dest 的函数。要求:1. src 可以是字符串常量,也可以是字符数组2. dest 必须是可以存储字符数据的内存空间,一般是字符数组或者动态申请内存字符空间,而且要求空间足够使用*/strcpy(arr, str);printf("arr = %s\n", arr); // 打印结果为 arr = 1234567890printf("---------------------\n");strncpy(arr, "abcd", 3);// strncpy 在使用时需要手动添加字符串结束符,以确保目标字符串的正确结束。// 加上 arr[3] = '\0';打印结果为 arr = abcprintf("arr = %s\n", arr); // arr = abc4567890printf("---------------------\n");char dest[30] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', '\0'};memcpy(&dest[4], "1234", 6); // dest: abcd1234printf("dest: %s\n", dest);memmove(&dest[3], "*", 1);printf("dest: %s\n", dest); // dest: abc*1234printf("---------------------\n");/*字符串追加函数格式:char *strcat(char *dest, const char *src);把 src 所指向的字符串追加到 dest 所指向的字符串结尾char *strncat(char *dest, const char *src, size_t n);把 src 所指向的字符串追加到 dest 所指向的字符串结尾, 直到 n 字符长度为止或者到末尾标记 '\0'要求:1. 末尾标记'\0'2. 返回值数据类型为 char *,返回内容是 dest 对应的空间地址3. dest 必须有对应内存空间*/strcat(arr, "hjkl");printf("arr = %s\n", arr); // arr = abc4567890hjklprintf("---------------------\n");strncat(arr, "123", 8);printf("arr = %s\n", arr); // arr = abc4567890hjkl123printf("---------------------\n");/*字符串比较函数格式:int strcmp(const char *str1, const char * str2);把 str1 所指向的字符串和 str2 所指向的字符串进行比较。int strcmp(const char *str1, const char *str2, size_t n);把 str1 和 str2 进行比较,最多比较前 n 个字节。int memcmp(const void *str1, const void *str2, size_t n);把 str1 和 str2 的前 n 个字节进行比较。要求:1. 0 表示 str1 和 str2 两个字符串前 N 个字符一致 2. 1 or -1 表示两个字符串前 N 个字符不一致。*/char *str1 = "12345678";char *str2 = "1234567d";// 定义 bool 记录判断结果int bool = strcmp(str1, str2);printf("bool : %d\n", bool); // bool : -44bool = strncmp(str1, str2, 4);printf("bool : %d\n", bool); // bool : 0bool = memcmp(str1, str2, 5);printf("bool : %d\n", bool); // bool : 0printf("---------------------\n");/*字符串查找指定字符函数格式:char *strchr(const char *str, int c);在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。char *strrchr(const char *str, int c);在参数 str 所指向的字符串中搜索最后一次出现字符 c(一个无符号字符)的位置。char *strstr(const char*haystack, const char *needle);在字符串 haystack 中查找第一次出现字符串 needle(不包含空结束字符)的位置。void *memchr(const void *str, int c, size_t n);在参数 str 所指向的字符串的前 n 个字节中搜索第一次出现字符 c(一个无符号字符)的位置。*/char *p = strchr(str1, '2');printf("p : %s\n", p); // p : 2345678printf("---------------------\n");p = strrchr(str1, '4');printf("p : %s\n", p); // p : 45678printf("---------------------\n");p = strstr(str1, "34"); // str : 12345678printf("p : %s\n", p); // p : 345678p = strstr(str1, "789"); // str : 12345678printf("p : %s\n", p); // p : (null)printf("---------------------\n");p = memchr(str1, '5', 6);printf("p : %s\n", p); // p : 5678printf("---------------------\n");/*计算字符串长度格式:size_t strlen(const char *str);计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。*/size_t length = strlen(str);printf("str : %s\n", str); // str : 1234567890printf("strlen: %ld\n", length); // strlen: 10return 0;
}
4. 文件操作
4.1 文件操作写入到数据文件中
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main(int argc, char const *argv[])
{   // 1. 确定文件路径char * filename = "./3.txt";/*2. fopen 打开文件,mode选择 w w+ a a+w 和 w+ 都是清空文件内容写入数据操作。如果文件不存在,可以创建文件a 和 a+ 是在当前文件的末尾写入数据操作如果文件不存在,可以创建文件*/ FILE * fp = fopen(filename, "a");// 3. 利用 fputc 写入数据到文件中fputc('A', fp);// 4. 关闭文件fclose(fp);return 0;
}
4.2 文件操作读取数据到程序中
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main(int argc, char const *argv[])
{// 1. 确定读取文件的路径char *filename = "./1.txt";/*2. 通过 fopen 打开文件,mode 选择 r r+ w+ a+*/FILE *fp = fopen(filename, "r");// 3. 通过 fgetc 读取数据int content = -1;while ((content = fgetc(fp)) != EOF){printf("%c\n", content);}// 4. 关闭文件fclose(fp);
}

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

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

相关文章

使用plotly dash 画3d圆柱(Python)

plotly3D &#xff08;3d charts in Python&#xff09;可以画3维图形 在做圆柱的3D装箱项目&#xff0c;需要装箱的可视化&#xff0c;但是Mesh &#xff08;3d mesh plots in Python&#xff09;只能画三角形&#xff0c;所以需要用多个三角形拼成一个圆柱&#xff08;想做立…

Python qt.qpa.xcb: could not connect to display解决办法

遇到问题&#xff1a;qt.qpa.xcb: could not connect to display 解决办法&#xff0c;在命令行输入&#xff1a; export DISPLAY:0 然后重新跑python程序&#xff0c;解决&#xff01; 参考博客&#xff1a;qt.qpa.xcb: could not connect to displayqt.qpa.plugin: Could …

Ubuntu搭建国标平台wvp-GB28181-pro

目录 简介安装和编译1.查看操作系统信息2.安装最新版的nodejs3.安装java环境4.安装mysql5.安装redis6.安装编译器7.安装cmake8.安装依赖库9.编译ZLMediaKit9.1.编译结果说明 10.编译wvp-GB28181-pro10.1.编译结果说明 配置1.WVP-PRO配置文件1.1.Mysql数据库配置1.2.REDIS数据库…

监听项目中指定属性数据,点击或模块显示时

当项目中&#xff0c;需要获取某个页面上、某个标签上、有指定自定义属性时&#xff0c;需要在点击该元素时进行公共逻辑处理&#xff0c;或该元素在显示的时候进行逻辑处理&#xff0c;这时可以定义一个公共的方法&#xff0c;在每个页面引用&#xff0c;并写入数据即可 &…

OpenHarmony RK3568 启动流程优化

目前rk3568的开机时间有21s&#xff0c;统计的是关机后从按下 power 按键到显示锁屏的时间&#xff0c;当对openharmony的系统进行了裁剪子系统&#xff0c;系统app&#xff0c;禁用部分服务后发现开机时间仅仅提高到了20.94s 优化微乎其微。在对init进程的log进行分析并解决其…

【Spring Boot 3】异步线程任务

【Spring Boot 3】异步线程任务 背景介绍开发环境开发步骤及源码工程目录结构总结背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总是要花费或多或…

面向云服务的GaussDB全密态数据库

前言 全密态数据库&#xff0c;顾名思义与大家所理解的流数据库、图数据库一样&#xff0c;就是专门处理密文数据的数据库系统。数据以加密形态存储在数据库服务器中&#xff0c;数据库支持对密文数据的检索与计算&#xff0c;而与查询任务相关的词法解析、语法解析、执行计划生…

【工具】raw与jpg互转python-cpp

在工作中常常需要将图像转化为raw数据或者yuv数据&#xff0c;这里将提供 cpp 版本和 python 版本的互转代码 代码链接见文档尾部。 cpp 版本 jpg2raw.cpp #include <fstream> #include <iostream> #include <opencv2/core.hpp> #include <opencv2/hig…

oracle版本号中的i,G,C代表什么含义

大家都熟悉的 Oracle 版本号有 9i、10G、11G、12C、19C 等&#xff0c;但在早期&#xff0c;Oracle 的版本号并不包含这些字母。 最初&#xff0c;Oracle 的版本号简单地是 1、2、3、4 等&#xff0c;一直发展到 1999 年发布的 8i 版本。20 世纪末是互联网爆发式发展的时代。 …

将一个excel文件里面具有相同参数的行提取后存入新的excel

功能描述&#xff1a; 一个excel里面有很多行数据&#xff0c;其中“交易时间”这一列有很多交易日期&#xff0c;有些行的交易日期是一样的&#xff0c;那么就把所有交易日期相同的行挑出来&#xff0c;形成一个新的以交易日期命名的文件。import pandas as pd import os# 读取…

跨境ERP定制趋势预测:数字化转型助您赢得市场先机

随着全球贸易的不断融合和发展&#xff0c;跨境业务已成为许多企业拓展市场的重要途径。在这个背景下&#xff0c;ERP定制正逐渐成为企业数字化转型的关键利器。本文将为您预测跨境ERP定制的趋势&#xff0c;并探讨数字化转型如何助您赢得市场先机。 ERP定制趋势预测 1. 数据…

命令行启动Android Studio模拟器

1、sdk路径查看&#xff08;打开Android Studio&#xff09; 以上前提是安装的Android Studio并添加了模拟器&#xff01;&#xff01;&#xff01; 2、复制路径在终端进入到 cd /Users/duxi/Library/Android/sdk目录&#xff08;命令行启动不用打开Android Studio就能运行模拟…

【Java程序设计】【C00182】基于SSM的高校成绩报送管理系统(论文+PPT)

基于SSM的高校成绩报送管理系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的高校成绩报送系统 本系统分为前台系统、管理员、教师以及学生4个功能模块。 前台系统&#xff1a;当游客打开系统的网址后&#xff0c;首…

25考研北大软微该怎么做?

25考研想准备北大软微&#xff0c;那肯定要认真准备了 考软微需要多少实力 现在的软微已经不是以前的软微了&#xff0c;基本上所有考计算机的同学都知道&#xff0c;已经没有什么信息优势了&#xff0c;只有实打实的有实力的选手才建议报考。 因为软微的专业课也是11408&am…

PyTorch自动微分机制的详细介绍

PyTorch深度学习框架的官方文档确实提供了丰富的信息来阐述其内部自动微分机制。在PyTorch中&#xff0c;张量&#xff08;Tensor&#xff09;和计算图&#xff08;Computation Graph&#xff09;的设计与实现使得整个系统能够支持动态的、高效的自动求导过程。 具体来说&#…

掌握Java多线程利器:ConcurrentHashMap详解

在并发编程的世界里&#xff0c;每一个微小的延迟都可能积累成为性能瓶颈。今天&#xff0c;让我们一起揭开Java中ConcurrentHashMap的神秘面纱&#xff0c;这是一个在多线程环境中不可或缺的高性能组件。从它的设计理念到底层实现&#xff0c;我们将详细探讨ConcurrentHashMap…

基于团簇阵列中的量子隧穿效应的氢气传感器

在科技日新月异的今天&#xff0c;传感器技术也在不断地发展和创新。其中&#xff0c;基于团簇阵列中的量子隧穿效应的氢气传感器&#xff0c;以其独特的优势和巨大的潜力&#xff0c;成为了气体检测技术领域的一颗新星。 一、什么是基于团簇阵列中的量子隧穿效应的氢气传感器&…

浅谈Java主流锁

浅谈Java主流锁 synchronized关键字 synchronized是Java中最基本的锁机制&#xff0c;可以用来修饰方法或代码块。 修饰方法&#xff1a; public synchronized void method() {// 代码 }修饰代码块&#xff1a; public void method() {synchronized (this) {// 代码} }synch…

年度重磅更新!“AI+可视化拖拽”实现个性化页面极速开发!组件设计器即将上线!

AI智能开发&#xff01;网站一键复刻&#xff01;设计稿秒变成品&#xff01; 相信对很多关注低代码和AI技术的小伙伴来说&#xff0c; 都觉得像这些还只是停留在概念上的技术&#xff0c;很难落地实践。 但是在「织信」已经全部都做到了&#xff01; 无图无真相&#xff0…

企业车辆管理乱、用车难?来试试车辆管理系统!

车辆作为最重要的交通工具在企业中得以普及。随着车辆保有量的不断攀升&#xff0c;企业对于车辆管理的要求也越来越高&#xff0c;会要求管理的多维度和车辆使用的灵活性。 传统的表格管理方式很难及时跟进企业车辆的使用状态&#xff0c;导致企业车辆管理效率低、车辆使用调…