当前位置: 首页 > news >正文

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

文章目录

        • 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);
}

相关文章:

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

文章目录 1. C/C 字符串概述1.1 字符串常量1.2 字符数组 2. 字符串函数2.1 拷贝赋值功能相关函数&#xff08;覆盖&#xff09;2.1.1 strcpy2.1.2 strncpy2.1.3 memcpy2.1.4 memmove2.1.5 memset2.1.6 注意小点2.1.7 【函数区别】 2.2 追加功能相关函数2.2.1 strcat2.2.2 strnc…...

【c++学习】数据结构中的栈

c栈 栈代码用线性表实现栈用链表实现栈 栈 栈&#xff1a;先进后出 只对栈顶元素进行操作&#xff0c;包括新元素入栈、栈顶元素出栈和查看栈顶元素&#xff08;只支持对栈顶的增、删、查&#xff09;。 代码 下述代码实现了栈及其接口 包括对栈顶的增、删、查以及查看栈的大…...

新建react项目,react-router-dom配置路由,引入antd

提示&#xff1a;reactrouter6.4版本&#xff0c;与reactrouter5.0的版本用法有区别&#xff0c;互不兼容需注意 文章目录 前言一、创建项目二、新建文件并引入react-router-dom、antd三、配置路由跳转四、效果五、遇到的问题六、参考文档总结 前言 需求&#xff1a;新建react项…...

Transformer and Pretrain Language Models3-6

Pretrain Language Models预训练语言模型 content&#xff1a; language modeling&#xff08;语言模型知识&#xff09; pre-trained langue models(PLMs&#xff09;&#xff08;预训练的模型整体的一个分类&#xff09; fine-tuning approaches GPT and BERT&#xff08;…...

Linux系统中编写bash脚本进行mysql的数据同步

一、为何要用脚本做数据同步 &#xff08;一&#xff09;、问题 我们的视频监控平台云服务器&#xff0c;需要向上级的服务器定期同步一些数据表的数据&#xff0c;前期做了个程序&#xff0c;可以实现同步。但是&#xff0c;现在数据库的结构改了&#xff0c;结果又需要该程序…...

光耦驱动继电器电路图大全

光耦驱动继电器电路图&#xff08;一&#xff09; 注&#xff1a; 1U1-1脚可接12V&#xff0c;也可接5V&#xff0c;1U1导通&#xff0c;1Q1导通&#xff0c;1Q1-30V&#xff0c;线圈两端电压为11.7V. 1U1-1脚不接或接地&#xff0c;1U1不通&#xff0c;1Q1截止&#xff0c;1…...

【AI量化分析】小明在量化中使用交叉验证原理深度分析解读

进行交叉验证好处 提高模型的泛化能力&#xff1a;通过将数据集分成多个部分并使用其中的一部分数据进行模型训练&#xff0c;然后使用另一部分数据对模型进行测试&#xff0c;可以确保模型在未见过的数据上表现良好。这样可以降低模型过拟合或欠拟合的风险&#xff0c;提高模…...

2024最新版Visual Studio Code安装使用指南

2024最新版Visual Studio Code安装使用指南 Installation and Usage Guide for the Latest Visual Studio Code in 2024 By JacksonML Visual Studio Code最新版1.85已经于2023年11月由其官网 https://code.visualstudio.com正式发布&#xff0c;这是微软公司2024年发行的的最…...

接口请求重试八种方法

请求三方接口需要加入重试机制 一、循环重试 在请求接口的代码块中加入循环&#xff0c;如果请求失败则继续请求&#xff0c;直到请求成功或达到最大重试次数。 int retryTimes 3; for(int i 0;i < retryTimes;i){try{//请求接口的代码break;}catch(Exception e){//处理…...

【Linux 基础】常用基础指令(上)

文章目录 一、 创建新用户并设置密码二、ls指令ls指令基本概念ls指令的简写操作 三、pwd指令四、cd指令五、touch指令六、rm指令七、mkdir指令八、rmdir 指令 一、 创建新用户并设置密码 ls /home —— 查看存在多少用户 whoami —— 查看当前用户名 adduser 用户名 —— 创建新…...

【RT-DETR有效改进】EfficientFormerV2移动设备优化的视觉网络(附对比试验效果图)

前言 大家好&#xff0c;我是Snu77&#xff0c;这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进&#xff0c;内容持续更新&#xff0c;每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本&#xff0c;同时修改内容也支持Re…...

《动手学深度学习(PyTorch版)》笔记4.4

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过。…...

Linux/Academy

Enumeration nmap 首先扫描目标端口对外开放情况 nmap -p- 10.10.10.215 -T4 发现对外开放了22,80,33060三个端口&#xff0c;端口详细信息如下 结果显示80端口运行着http&#xff0c;且给出了域名academy.htb&#xff0c;现将ip与域名写到/et/hosts中&#xff0c;然后从ht…...

windows .vscode的json文件配置 CMake 构建项目 调试窗口中文设置等

一、CMake 和 mingw64的安装和环境配置 二、tasks.json和launch.json文件配置 tasks.json {"version": "2.0.0","options": {"cwd": "${workspaceFolder}/build"},"tasks": [{"type": "shell&q…...

uniapp canvas做的刮刮乐解决蒙层能自定义图片

最近给湖南中烟做元春活动&#xff0c;一个月要开发4个小活动&#xff0c;这个是其中一个难度一般&#xff0c;最难的是一个类似鲤鱼跃龙门的小游戏&#xff0c;哎&#xff0c;真实为难我这个“拍黄片”的。下面是主要代码。 <canvas :style"{width:widthpx,height:hei…...

利用SPI,结合数据库连接池durid进行数据服务架构灵活设计

接着上一篇文章业务开始围绕原始凭证展开,而展开的基础无疑是围绕着科目展开的。首先我们业务层面以财政部的小企业会计准则的一级科目引入软件中。下面我们来考虑如何将科目切入软件更加灵活,方便业务扩展、维护与升级。 SPI是首先想到的数据服务方式 为什么会想到它呢?首…...

自动驾驶的决策层逻辑

作者 / 阿宝 编辑 / 阿宝 出品 / 阿宝1990 自动驾驶意味着决策责任方的转移 我国2020至2025年将会是向高级自动驾驶跨越的关键5年。自动驾驶等级提高意味着对驾驶员参与度的需求降低&#xff0c;以L3级别为界&#xff0c;低级别自动驾驶环境监测主体和决策责任方仍保留于驾驶…...

排序算法——希尔排序算法详解

希尔排序算法详解 一. 引言1. 背景介绍1.1 数据排序的重要性1.2 希尔排序的由来 2. 排序算法的分类2.1 比较排序和非比较排序2.2 希尔排序的类型 二. 希尔排序基本概念1. 希尔排序的定义1.1 缩小增量排序1.2 插入排序的变种 2. 希尔排序的工作原理2.1 分组2.2 插入排序2.3 逐步…...

Docker 容器内运行 mysqldump 命令来导出 MySQL 数据库,自动化备份

备份容器数据库命令&#xff1a; docker exec 容器名称或ID mysqldump -u用户名 -p密码 数据库名称 > 导出文件.sql请替换以下占位符&#xff1a; 容器名称或ID&#xff1a;您的 MySQL 容器的名称或ID。用户名&#xff1a;您的 MySQL 用户名。密码&#xff1a;您的 MySQL …...

【Java万花筒】数字信号魔法:Java库的魅力解析

从傅立叶到矩阵&#xff1a;数字信号Java库全景剖析 前言 随着数字信号处理在科学、工程和数据分析领域的广泛应用&#xff0c;开发者对高效、灵活的工具的需求日益增长。本文旨在探讨几个与数字信号处理相关的Java库&#xff0c;通过介绍其特点、用途以及与已有库的关系&…...

面试高频知识点:2线程 2.1 线程池 2.1.2 JDK中常见的线程池实现有哪些?

1. Executors类 Executors类是线程池的工厂类&#xff0c;提供了一些静态方法用于创建不同类型的线程池。然而&#xff0c;它的使用并不推荐在生产环境中&#xff0c;因为它存在一些缺点&#xff0c;比如默认使用无界的任务队列&#xff0c;可能导致内存溢出。 2. ThreadPool…...

Azure Private endpoint DNS 记录是如何解析的

Private endpoint 从本质上来说是Azure 服务在Azure 虚拟网络中安插的一张带私有地址的网卡。 举例来说如果Storage account在没有绑定private endpoint之前&#xff0c;查询Storage account的DNS记录会是如下情况&#xff1a; Seq Name …...

windows 安装sql server 华为云文档

先安装net3.5,剩下安装sqlserver步骤看下面文档 安装SQL Server_弹性云服务器 ECS_最佳实践_搭建Microsoft SharePoint Server 2016_华为云 (huaweicloud.com)...

相同主题文章竟同时发表在同一个2区期刊 | 孟德尔随机化周报(1.10-1.16)

欢迎报名2024年郑老师团队课程课程&#xff01; 郑老师科研统计培训&#xff0c;包括临床数据、公共数据分析课程&#xff0c;欢迎报名 孟德尔随机化,Mendilian Randomization&#xff0c;简写为MR&#xff0c;是一种在流行病学领域应用广泛的一种实验设计方法&#xff0c;利用…...

网络安全的使命:守护数字世界的稳定和信任

在数字化时代&#xff0c;网络安全的角色不仅仅是技术系统的守护者&#xff0c;更是数字社会的信任保卫者。网络安全的使命是保护、维护和巩固数字世界的稳定性、可靠性以及人们对互联网的信任。本文将深入探讨网络安全是如何履行这一使命的。 第一部分&#xff1a;信息资产的…...

【七、centos要停止维护了,我选择Almalinux】

搜索镜像 https://developer.aliyun.com/mirror/?serviceTypemirror&tag%E7%B3%BB%E7%BB%9F&keywordalmalinux dvd是有界面操作的&#xff0c;minimal是最小化只有命里行 镜像下载地址 安装和centos基本一样的&#xff0c;操作命令也是一样的&#xff0c;有需要我…...

架构师之路(十六)计算机网络(传输层)

前置知识&#xff08;了解&#xff09;&#xff1a;计算机基础。 作为架构师&#xff0c;我们所设计的系统很少为单机系统&#xff0c;因此有必要了解计算机和计算机之间是怎么联系的。局域网的集群和混合云的网络有啥区别。系统交互的时候网络会存在什么瓶颈。 既然网络层已经…...

python 调用SumatraPDF 静默打印PDF

SumatraPDF 文档 https://www.sumatrapdfreader.org/docs/Command-line-arguments ⽆边框 noscale/缩⼩到合适⼤⼩&#xff08;默认&#xff09;shrink/合适⼤⼩ fit/compat 兼容 # 分为 Portrait (纵向)和 Landscape (横向)两类 https://github.com/sumatrapdfreader/sumatrap…...

nginx部署https域名ssl证书

1、在你服务器nginx文件夹下创建ssl文件夹存放证书文件和秘钥文件 把.crt和.key证书放上 2、在nginx.conf文件中配置 在nginx.conf文件中server下加入listen 443 ssl; server {listen 443 ssl;charset utf-8;index index.html index.htm index.jsp index.do;add_heade…...

Python学习之路-Django基础:HelloDjango

Python学习之路-Django基础:HelloDjango 简介 Django&#xff0c;发音为[dʒŋɡəʊ]&#xff0c;是用python语言写的开源web开发框架&#xff0c;并遵循MVC设计。劳伦斯出版集团为了开发以新闻内容为主的网站&#xff0c;而开发出来了这个框架&#xff0c;于2005年7月在BSD…...

工信部网站备案查通知/seopc流量排行榜企业

进入三月&#xff0c;令人揪心的新冠疫情在国内逐渐得到了控制&#xff0c;春天似乎正在悄然到来。回首过去的一个月&#xff0c;是中国科技承压颇重的一个月。不仅大量行业面临着线上化、远程化、无接触化转型&#xff0c;社会各个环节的防疫工作中&#xff0c;同样也需要技术…...

wordpress html5 app/如何做好网站站内优化

1.mysql DAYOFWEEK 和 WEEKDAY获取星期 在mysql中&#xff0c;我们可以用DAYOFWEEK 和 WEEKDAY函数获取指定日期的星期。区别在于DAYOFWEEK获取的星期索引是以1开始&#xff0c;而WEEKDAY获取的星期索引是以0开始. DAYOFWEEK(date) 返回日期date的星期索引(1星期天&#xff0…...

惠阳区建设局网站/网站如何建立

近日&#xff0c;百度ting!正式发布了beta版Android手机客户端&#xff0c;凭借着百万级的正版资源&#xff0c;让用户每天都徜徉于海量音乐之海&#xff0c;感受音乐的有“声”力量。在功能、性能、服务及其他细节方面&#xff0c;百度ting!照样可圈可点&#xff0c;大有和知名…...

做农家乐网站/公司的seo是什么意思

命令模式(Command Pattern)&#xff1a;将一个请求封装为一个对象&#xff0c;从而使我们可用不同的请求对客户进行参数化&#xff1b;对请求排队或者记录请求日志&#xff0c;以及支持可撤销的操作。 命令模式包含如下角色&#xff1a; Command(抽象命令类):一般是一个接口&am…...

广安建设局网站/企业网站建站模板

在做分类时常常需要估算不同样本之间的相似性度量(Similarity Measurement)&#xff0c;这时通常采用的方法就是计算样本间的“距离”(Distance)。采用什么样的方法计算距离是很讲究&#xff0c;甚至关系到分类的正确与否。 本文的目的就是对常用的相似性度量作一个总结。 本文…...

网站被主流搜索引擎收录的网页数量是多少/磁力宅

一日从朋友处得到一网站权限&#xff0c;让我帮忙提权。拿到后看了看&#xff0c;C、D盘有只读权限&#xff0c;C:\Documents and Settings\All Users\Documents 可写。 没有装FTP软件和数据库。wscript.shell没有被禁用&#xff0c; 终端端口被改成45678 。试了试从外网连不上…...