6.3 字符数组

news2024/12/23 12:23:57

思维导图: 

 

前言:

主要内容:

前言内容整理

  1. 字符型数据和存储

    • 字符型数据是依据字符的ASCII代码存储在内存单元中,通常占用一个字节的空间。
    • ASCII代码可以被认为是整数,因此在C99标准中,字符类型被归类为整型数据的一种。
  2. 字符数据的特点及其在本书的讨论

    • 字符数据有着广泛的应用,特别是在字符串的形式中使用。
    • 由于字符数据的特性和应用范围广泛,本书将专门讨论这个话题,希望读者能够熟练掌握相关知识。
  3. C语言中的字符串处理

    • C语言本身没有字符串数据类型或变量。
    • 在C语言中,字符串是通过字符数组来实现和存储的。

这段前言主要是为了介绍字符型数据的基本存储方式和其在C语言中的应用,尤其是在构建字符串时的重要性和处理方式。

我的理解:

首先,它解释了字符型数据是如何存储在内存中的:即通过字符的ASCII代码存储,一般占用一个字节的空间。然后它提到在C99标准中,字符型数据是整型数据的一种特殊类型,因为ASCII代码是整数。

接着,这段文字强调了字符数据在实际编程中的重要性和应用范围,特别是它在构成字符串时的重要角色。由于字符数据的应用很广泛,并且具有其自身的特点,所以作者特意在本书中对其进行深入讨论,以帮助读者更好地掌握这个概念。

最后,它指出C语言中没有专门的字符串类型或变量,而是通过字符数组来实现字符串的存储和操作。

总结来说,这段文字旨在向读者介绍字符型数据的存储方式和其在C语言中的应用,特别是在形成字符串时的作用和重要性。同时,它也提示读者C语言处理字符串的特殊方式,即使用字符数组来存储和操作字符串。

6.3.1 怎样定义字符数组 

主要内容:

1. 字符数组的定义
- **定义**:字符数组是用于存储字符数据的数组,每个元素存放一个字符。
- **方法**:定义字符数组的方式与定义数值型数组类似。

2. 示例与解析
- **示例代码**:

 char c[10];
  c[0]='T';c[1]='';c[2]='a';c[3]='m';c[4]='';c[5]='h';c[6]='a';c[7]='p';c[8]='p';c[9]='y';


- **数组状态示意图**(图6.11):
  - c[0]: 'T'
  - c[1]: ''
  - c[2]: 'a'
  - c[3]: 'm'
  - c[4]: ''
  - c[5]: 'h'
  - c[6]: 'a'
  - c[7]: 'p'
  - c[8]: 'p'
  - c[9]: 'y'

 3. 字符数据的存储形式
- **以整数形式存放**:字符型数据是通过其ASCII代码(一种整数形式)来存储的。
- **使用整型数组存放字符数据**:可以利用整型数组来存储字符数据。
  - **示例代码**:
    ```c
    int e[10];
    e[0]='a'; // 合法,但会浪费存储空间
    ```
  - **代码解析**:
    - 此代码段展示了如何用整型数组来存储字符数据。虽然这种做法是合法的,但由于整型数组元素通常占用的空间大于字符型数组元素,这样做会浪费存储空间。

这部分内容讲述了字符数组的定义、赋值和字符数据的存储方式,以及字符数据如何通过其ASCII代码整数形式存储在整型数组中,尽管这样会浪费更多的存储空间。

我的理解:

6.3.2 字符数组初始化

主要内容:

### 6.3.2 字符数组的初始化

1. **初始化方式**
   - 利用初始化列表来对字符数组进行初始化,逐一将字符赋给数组的各个元素。
   - 示例: 
    

char c[10]={'I',' ','a','m',' ','h','a','p','p','y'}; 


     (注意: 代码中有语法错误和不完整的部分,这可能是一个错误或打字错误)

2. **未初始化的字符数组**
   - 如果没有进行初始化,字符数组的元素值将是不可预见的。

3. **初值个数与数组长度的关系**
   - 若初值个数 > 数组长度: 语法错误。
   - 若初值个数 < 数组长度: 只有前几个元素会被初始化,剩余的将被初始化为空字符 `\0`.

4. **省略数组长度**
   - 如果初值个数与数组长度相等,可以省略数组长度,系统将根据初值个数自动确定数组长度。
   - 示例:
   
     (注意: 示例中的代码有语法错误,'' 是不合法的字符)

5. **二维字符数组**
   - 可以定义并初始化一个二维字符数组。
   - 示例:

     (注意: 示例中的代码有语法错误,字符数组的初始化不正确)

6. **图示**
   - 图 6.12 和图 6.13 展示了字符数组的状态和一个菱形平面图形的示例。

 6.3.3 怎样引用字符数组中的元素

主要内容:

在这段文字中,我们可以看到两个代码示例,

### 例6.6:输出一个已知的字符串

#### 解题思路
- 定义一个字符数组并用初始化列表为其赋初值。
- 使用循环逐个输出字符数组中的字符。

#### 编写程序

#include<stdio.h>
int main()
{
    char c[15] = {'I', ' ', 'a', 'm', ' ', 'a', ' ', 's', 't', 'u', 'd', 'e', 'n', 't', '.'};
    int i;
    for(i = 0; i < 15; i++)
        printf("%c", c[i]);
    printf("\n");
    return 0;
}

#### 运行结果

### 例6.7:输出一个菱形图

#### 解题思路
- 画出一个如图6.13所示的平面菱形图案,每行包含5个字符(可以包含空白字符和'x'字符)。
- 定义一个字符型的二维数组,并用初始化列表进行初始化,其中列表中的字符顺序应与图6.12中各行中的字符顺序相对应(注意,你提供的文本没有给出图6.12和图6.13,你需要根据这两个图来设置初始化列表)。
- 使用嵌套的for循环输出字符数组中的所有元素。

#### 编写程序
(以下代码需要根据图6.12和图6.13来完善初始化列表)

#include<stdio.h>
int main()
{
    char diamond[5][5] = {
        {' ', ' ', 'x', ' ', ' '},
        {' ', 'x', ' ', 'x', ' '},
        {'x', ' ', ' ', ' ', 'x'},
        {' ', 'x', ' ', 'x', ' '},
        {' ', ' ', 'x', ' ', ' '}
    };
    int i, j;
    for(i = 0; i < 5; i++) {
        for(j = 0; j < 5; j++)
            printf("%c", diamond[i][j]);
        printf("\n");
    }
    return 0;
}

#### 运行结果

这两个示例可以帮助你理解如何引用字符数组中的元素。在C语言中,数组是通过索引来引用其元素的,其中索引是从0开始的。在这些示例中,我们通过在循环中使用索引来引用和打印字符数组中的元素。

6.3.4 字符串和字符串结束标志

主要内容:

这段文本讲述了C语言中字符串的表示方式和其结束标志'\0'的重要性。下面我们逐一讨论其中的重点。

#### 1. 字符串的表示和存储
在C语言中,字符串是作为字符数组来处理的。一个字符数组可以用来存储一个字符串,其中字符串的字符是逐个存储到数组元素中的。

#### 2. 字符串结束标志'\0'
为了确定字符串的实际长度,C语言引入了一个特殊的字符'\0'作为字符串结束标志。遇到'\0'字符时,认为字符串结束,其前面的字符组成一个字符串。这意味着字符数组的长度不再是重点,而是通过'\0'的位置来判断字符串何时结束。

#### 3. 字符数组的初始化
字符数组可以通过字符串常量来初始化。这种方式直观、方便且符合人们的习惯。例如:

char e[] = "I am happy";

char c[] = "I am happy";

注意,初始化时系统会自动在字符串末尾添加一个'\0'字符,因此数组的长度会比字符串常量的字符数多一。

#### 4. '\0'字符的应用
系统在存储字符串常量时会自动在其末尾添加'\0'字符,以标示字符串的结束。这样,可以方便地使用例如`printf("%s", str)`这样的函数来输出字符串,因为函数会自动检测'\0'字符来判断字符串何时结束。

#### 5. 字符数组中'\0'的重要性
如果想用一个新的字符串替换字符数组中的原有字符串,应注意添加'\0'字符以标示新字符串的结束。否则,新字符串和原有字符串会连成一片,无法区分。例如:

char c[] = "C program.";
// ... (假设我们将"Hello"存储到数组c的前5个位置)
printf("%s\n", c);

如果没有在"Hello"后面添加'\0'字符,输出结果将是"Hellogram."而不仅仅是"Hello"。

#### 小结
通过这段文本,我们可以更好地理解C语言中字符串的表示方式及'\0'字符在字符串处理中的重要性。这有助于我们更好地管理和处理字符串,避免因字符串未正确结束而导致的潜在错误。

 

 6.3.5 字符数组的输入输出

主要内容:

#### 方法

1. **逐个字符输入输出**
    - 使用 `%c` 格式符来逐一输入或输出字符。
    - 例: 示例 6.6 (未给出)

2. **整个字符串的输入输出**
    - 使用 `%s` 格式符来进行字符串的输入或输出。
    - 例:
       

 char c[] = "China";
        printf("%s\n", c);


    - 在内存中, 数组 `c` 的存储情况是逐字符存储,最后是结束符 `\0`。
    - 输出时只会输出到遇见 `\0` 结束符。

#### 说明

1. **输出字符串时**
   - 输出的字符中不包括结束符 '\0'。

2. **使用 `%s` 格式符**
   - 在 `printf` 函数中的输出项应该是字符数组名,而非数组元素名。
   - 错误示例: `printf("%s", c[0]);` (c[0]是数组元素而非数组名)

3. **数组长度与实际字符串长度**
   - 如果数组长度大于字符串的实际长度,输出时只输出到第一个 '\0' 结束。
   - 例: 
     

 char c[10] = "China";
     printf("%s", c);


   - 以上代码只输出“China”,不会输出10个字符。

4. **字符数组中的多个 '\0'**
   - 如果一个字符数组中包含一个以上的 '\0',则输出时会在遇到第一个 '\0' 时停止。

5. **使用 `scanf` 函数输入字符串**
   -

 scanf("%s", c);


   - 输入的字符串应该短于已定义的字符数组的长度。
   - 例如, 定义 `char e[6];` 并输入 "ChinaL",系统会自动在 "China" 后添加 '\0'。

6. **输入多个字符串**
   - 使用 `scanf` 函数可以输入多个以空格分隔的字符串。
   - 例:

char str1[5], str2[5], str3[5];
     scanf("%s%s%s", str1, str2, str3);


   - 以上代码将输入 "How are you?" 分割为三个字符串,存储在 `str1`、`str2` 和 `str3` 中。

7. **注意事项**
   - 在使用 `scanf` 函数时,字符数组名作为输入项时不应该再加地址符 '&'。
   - 错误示例: `scanf("%s", &str);`
   
8. **字符数组名和地址**
   - 字符数组名代表该数组的起始地址。
   - 可以使用 `printf` 语句得到数组第一个元素的地址,例如:
      ```c
      printf("%p", c);
      ```
     此处显示数组 `c` 的起始地址。
   
9. **字符串输出的实现**
   - 使用 `printf("%s", c);` 输出字符串是通过找到数组名 `c` 代表的起始地址,然后逐个输出字符直到遇到 '\0' 结束。

这就是字符数组的输入和输出的基本概念和实现方法。

 

6.3.6 字符串处理函数 

主要内容:

### 6.3.6 使用字符串处理函数

- 字符串处理函数是C编译系统提供的公共函数,用于方便地处理字符串运算。
- 这些函数不是C语言的核心组成部分,而是由编译系统提供来增强用户体验。
- 以下是一些常用的字符串处理函数:

1. **`puts` 函数** - 用于输出字符串
   - 用法:`puts(字符数组)`
   - 在输出时,字符串的结束标记 '\0' 转换为换行符 '\n'。

2. **`gets` 函数** - 用于输入字符串
   - 用法:`gets(字符数组)`
   - 该函数将终端输入的字符串存入字符数组,并返回数组的起始地址。

3. **`strcat` 函数** - 字符串连接函数
   - 用法:`strcat(字符数组1, 字符数组2)`
   - 该函数将字符数组2连接到字符数组1的后面,并返回字符数组1的地址。
   - 注意保证字符数组1有足够的空间来容纳新的字符串。

4. **`strcpy` 和 `strncpy` 函数** - 字符串复制函数
   - 用法:`strcpy(字符数组1, 字符串2)` 或 `strncpy(字符数组1, 字符串2, n)`
   - 这些函数将字符串2(或其前n个字符)复制到字符数组1中。
   - 注意字符数组1应有足够的空间来容纳字符串2。

5. **`strcmp` 函数** - 字符串比较函数
   - 用法:`strcmp(字符串1, 字符串2)`
   - 该函数比较两个字符串,并根据比较结果返回相应的值(0,正数或负数)。

6. **`strlen` 函数** - 测字符串长度的函数
   - 用法:`strlen(字符数组)`
   - 该函数返回字符串的实际长度(不包括 '\0')。

7. **`strlwr` 函数** - 将字符串转换为小写
   - 用法:`strlwr(字符串)`

8. **`strupr` 函数** - 将字符串转换为大写
   - 用法:`strupr(字符串)`

- 当使用这些字符串处理函数时,需要在程序文件开头包含 `<string.h>` 文件。
- 这些函数提供了一种方便的方式来处理字符串运算,但不需要硬记它们;可以根据函数名猜测其功能,并在需要时查阅文档。

### 注意点

- 这些函数不是C语言的核心组成部分,但它们提供了处理字符串运算的便利方式。
- 使用这些函数时,应确保字符数组有足够的空间来避免溢出。
- 字符串的比较应根据ASCII码值进行,并注意大写字母的ASCII值小于小写字母的。
- 使用这些函数可以大大提高字符串操作的效率和便利性。

 

 

6.3.7 字符数组应用举例 

 例6.8 统计新单词

  我的答案:

## 思考过程和分析过程

在这个问题中,我们的目标是统计一行字符串中有多少个单词,以空格作为单词的分隔符。为了实现这个功能,我们可以使用一个标志变量(如word)来跟踪我们是否处于单词内还是单词外,同时我们需要一个计数器来统计我们遇到的单词数量。

### 思考过程:

1. 初始化一个标志变量`word`为0和一个计数器`num`为0。
2. 遍历输入字符串中的每一个字符。
3. 如果当前字符是非空格字符,并且`word`为0(表示前一个字符是空格或者这是第一个字符),我们将`word`设为1,并将`num`增加1,因为我们已经找到了一个新的单词的开始。
4. 如果当前字符是空格,我们将`word`设为0,表示我们现在是在单词外面。
5. 在遍历结束后,`num`将包含单词的数量。

### 分析过程:

1. **边界条件**:我们需要确保处理字符串的开始和结束时的边界条件。
2. **循环条件**:在遍历字符串时,我们应该正确地设置循环条件,以防止数组越界。
3. **代码效率**:我们应该尽量使代码高效,避免不必要的操作。

下面是在C,C++和JAVA中实现该逻辑的代码:

### C语言实现

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

int main() {
    char str[100];
    fgets(str, 100, stdin);

    int num = 0, word = 0;
    for(int i = 0; i < strlen(str); i++) {
        if(str[i] != ' ' && str[i] != '\n') {
            if(word == 0) {
                word = 1;
                num++;
            }
        } else {
            word = 0;
        }
    }

    printf("There are %d words in this line.\n", num);
    return 0;
}

### C++实现

#include <iostream>
#include <string>
using namespace std;

int main() {
    string str;
    getline(cin, str);

    int num = 0, word = 0;
    for(char c : str) {
        if(c != ' ') {
            if(word == 0) {
                word = 1;
                num++;
            }
        } else {
            word = 0;
        }
    }

    cout << "There are " << num << " words in this line." << endl;
    return 0;
}

### JAVA实现

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();

        int num = 0, word = 0;
        for(int i = 0; i < str.length(); i++) {
            if(str.charAt(i) != ' ') {
                if(word == 0) {
                    word = 1;
                    num++;
                }
            } else {
                word = 0;
            }
        }

        System.out.println("There are " + num + " words in this line.");
    }
}

在以上代码中,我们按照之前讨论的思考和分析过程实现了单词计数逻辑。首先,我们读取一行输入,然后我们遍历每一个字符,并使用`word`变量来跟踪我们是否处于一个单词中。如果我们遇到一个新的单词的开始,我们增加单词计数器`num`。

 

例6.9 比较字符串大小 

 我的答案:

要找出三个字符串中的“最大”者,首先我们需要明确“最大”的定义。在这里,我们可以将其理解为字典序最大的字符串。

我们可以按照以下步骤解决这个问题:

1. 首先,我们需要获取这三个字符串。
2. 接着,我们可以使用字符串比较函数(例如C语言中的`strcmp`,C++中的`string::compare`或者Java中的`String.compareTo`)来比较这些字符串。
3. 最后,我们可以确定并输出字典序最大的字符串。

以下是各个语言的实现:

### C 语言

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

int main() {
    char str1[100], str2[100], str3[100];
    printf("Enter three strings:\n");
    scanf("%s %s %s", str1, str2, str3);

    char *max_str;
    if (strcmp(str1, str2) > 0) {
        if (strcmp(str1, str3) > 0) {
            max_str = str1;
        } else {
            max_str = str3;
        }
    } else {
        if (strcmp(str2, str3) > 0) {
            max_str = str2;
        } else {
            max_str = str3;
        }
    }

    printf("The largest string is: %s\n", max_str);

    return 0;
}

### C++ 语言

#include <iostream>
#include <string>

int main() {
    std::string str1, str2, str3;
    std::cout << "Enter three strings:" << std::endl;
    std::cin >> str1 >> str2 >> str3;

    std::string max_str;
    if (str1 > str2) {
        if (str1 > str3) {
            max_str = str1;
        } else {
            max_str = str3;
        }
    } else {
        if (str2 > str3) {
            max_str = str2;
        } else {
            max_str = str3;
        }
    }

    std::cout << "The largest string is: " << max_str << std::endl;

    return 0;
}

### Java 语言

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Enter three strings:");
        String str1 = scanner.next();
        String str2 = scanner.next();
        String str3 = scanner.next();

        String max_str;
        if (str1.compareTo(str2) > 0) {
            if (str1.compareTo(str3) > 0) {
                max_str = str1;
            } else {
                max_str = str3;
            }
        } else {
            if (str2.compareTo(str3) > 0) {
                max_str = str2;
            } else {
                max_str = str3;
            }
        }

        System.out.println("The largest string is: " + max_str);
    }
}

这些程序首先获取三个字符串,然后使用嵌套的if-else结构来比较字符串并确定最大字符串。最后,它们将输出最大的字符串。

 

总结: 

### 重点:

1. **字符串的初始化和赋值**:理解如何在各种编程语言中正确初始化和赋值字符串是很重要的。
2. **字符串处理函数**:深入了解和掌握各种字符串处理函数(如`strlen`, `strcmp`, `strcpy`等)。
3. **字符串的遍历**:学会如何正确遍历字符串,以实现各种操作(如统计单词数量,找出最大字符串等)。

### 难点:

1. **字符串的内存管理**:在某些编程语言(如C)中,字符串的内存管理可能会变得比较复杂,需要注意内存分配和释放。
2. **字符串和字符数组的区别**:理解字符串和字符数组的区别和相互转换是一项挑战。
3. **动态字符串操作**:理解和掌握动态字符串的操作,如动态分配内存空间,可以是一个较为高级和复杂的主题。

### 易错点:

1. **数组越界错误**:在进行字符串操作时,很容易发生数组越界的错误。
2. **错误的字符串终止符**:在C语言中,忘记在字符串末尾添加终止符'\0'是一个常见的错误。
3. **字符串比较**:在进行字符串比较时,使用`==`代替`strcmp`或类似函数是一个常见的错误。
4. **输入缓冲区溢出**:在获取字符串输入时,不正确的处理可能导致缓冲区溢出和其他相关的错误。

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

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

相关文章

若依DataScopeAspect数据权限解析和ew.customSqlSegment源码解析

目录 一、DataScopeAspect使用场景二、ew.customSqlSegment${ew.customSqlSegment}build:this.normal &#xff1a; queryWrapper where 条件不为空的时候&#xff0c;才有normalget第二次 进来add(), 已经拼接完 ew.customSqlSegment 了&#xff0c; 因为DataPermission 注解进…

开发一个训练LORA的WebUI

文章目录 效果原理说明代码 效果 原理 基于开源项目kohya-ss/sd-scripts增加了Gradio UI&#xff0c;精简了训练参数&#xff0c;更适合初级“炼丹宝宝”的炼丹炉&#xff01; 核心思想还是比较简单的&#xff0c;通过Gradio UI来收集设置的训练参数&#xff0c;并通过python的…

全国职业技能大赛云计算--高职组赛题卷⑤(私有云)

全国职业技能大赛云计算--高职组赛题卷⑤&#xff08;私有云&#xff09; 第一场次题目&#xff1a;OpenStack平台部署与运维任务1 基础运维任务&#xff08;5分&#xff09;任务2 OpenStack搭建任务&#xff08;15分&#xff09;任务3 OpenStack云平台运维&#xff08;15分&am…

渗透测试信息收集方法

一、域名收集 OneForAll输出表格方便筛选(status、title) layer5.0saintsec更新版子域名挖掘机 百度云链接: https://pan.baidu.com/s/1VQ2HLocs39B72ElysskPog 提取码&#xff1a;121l subdomainsBurte,python2子域名爆破 https://github.com/y1ng1996/lijiejie_subDomainsBru…

偶现来电时手机操作出现重启

问题描述&#xff1a;偶现来电时手机操作出现重启 问题分析&#xff1a;从系统Log看 09-06 10:22:44.791829 1400 1425 W Watchdog: *** WATCHDOG KILLING SYSTEM PROCESS: Blocked in handler on main thread (main) 09-06 10:22:44.794133 1400 1425 W Watchdog: main …

Python Web开发:构建动态Web应用

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 Python已经成为一门流行…

功能基础篇2——常用哈希和加密算法介绍及Python相关库与实现

加解密 https://docs.python.org/3/library/crypto.html 三方库推荐&#xff0c;https://cryptography.io/en/latest/ Criptography&#xff0c;https://pypi.org/project/cryptography/ PyCryptodome&#xff0c;a fork of PyCrypto&#xff0c;https://pypi.org/project/…

vue3+ts 实现移动端分页

current 开始页码 pageSize 结束页码 const sizeref<number>(10) //一页显示十条 const eachCurrentPageref<number>(1) //默认是第一页interface ITdata {current: number,pageSize: number,// xxxx 其他参数... } const selectApplyList ref<…

vue-h5:移动Web单击事件和延迟300ms的问题

在PC端的网页&#xff0c;大部分的交互是通过click事件来实现的&#xff0c;然而在移动端&#xff0c;则是通过touch事件来实现触摸交互。 单击或者点击事件&#xff0c;指的是鼠标按下并且在短时间内放开【一般是小于300ms】。 那么移动端&#xff0c;也是类似&#xff0c;在…

大模型微调方法

下面是一些参数高效的微调大模型方法&#xff1a; Adapter 模型总览 Adapter作为一个插件加入到大模型内&#xff0c;微调下游任务时&#xff0c;固定大模型参数&#xff0c;只训练Adapter参数。 LoRA LoRA名为大语言模型的低阶适应&#xff0c;最初设计用于微调LLM&#xf…

面向未来的服务网格发展:展望服务网格技术未来的发展方向和趋势

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

RocketMQ 发送顺序消息

文章目录 顺序消息应用场景消息组&#xff08;MessageGroup&#xff09;顺序性生产的顺序性MQ 存储的顺序性消费的顺序性 rocketmq-client-java 示例&#xff08;gRPC 协议&#xff09;1. 创建 FIFO 主题生产者代码消费者代码解决办法解决后执行结果 rocketmq-client 示例&…

Nginx配置负载均衡时访问地址无法生效

场景还原 今天有小伙伴练习Nginx配置负载均衡时总是无法使用配置好的网址访问 配置文件信详情 http {# 负载均衡 后端IP地址和端口 webservers 策略 轮询upstream webservers{server 192.168.1.100:8080 weight90; server 127.0.0.1:8080 weight10; }server{listen 80;ser…

基于Java+SpringBoot+Vue的旧物置换网站设计和实现

基于JavaSpringBootVue的旧物置换网站设计和实现 源码传送入口前言主要技术系统设计功能截图数据库设计代码论文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码传送入口 前言 摘 要 随着时代在一步一步在进步&#xff0c;旧物也成人们的烦恼&#xff0c;…

深度学习中安装了包但是依然导入(import)失败这一问题,例如pytorch环境下已经安装了scikit-learn但是import不了

在跑深度学习模型的时候我们要先搭建pytorch环境&#xff0c;这个环境跟windows环境是不同的&#xff0c;我们默认在windows中安装的包在当前的虚拟环境中读取不到&#xff0c;所以导致我们明明安装了包但是依然在实际的导入中(import)报错。解决办法就是我们去虚拟环境中安装包…

使用Scrapy构建高效的网络爬虫

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 Scrapy是一个强大的Pyth…

电脑怎么取消磁盘分区?

有时候&#xff0c;我们的电脑会出现一个磁盘爆满&#xff0c;但另一个却空着&#xff0c;这时我们可以通过取消磁盘分区来进行调整&#xff0c;那么&#xff0c;这该怎么操作呢&#xff1f;下面我们就来了解一下。 磁盘管理取消磁盘分区 磁盘管理是Windows自带的磁盘管理工具…

展会动态 | 迪捷软件邀您参加2023世界智能网联汽车大会

*9月18日之前注册的观众免收门票费* 由北京市人民政府、工业和信息化部、公安部、交通运输部和中国科学技术协会联合主办的2023世界智能网联汽车大会将于9月21日-24日在北京中国国际展览中心&#xff08;顺义馆&#xff09;举行。 论坛背景 本届展会以“聚智成势 协同向新——…

论文阅读 - Natural Language is All a Graph Needs

目录 摘要 Introduction Related Work 3 InstructGLM 3.1 Preliminary 3.2 Instruction Prompt Design 3.3 节点分类的生成指令调整 3.4 辅助自监督链路预测 4 Experiments 4.1 Experimental Setup 4.2 Main Results 4.2.1 ogbn-arxiv 4.2.2 Cora & PubMed 4.…

类似东郊到家上门按摩小程序/包括商家入驻、服务查询、订单管理、用户评价等

类似东郊到家上门按摩小程序&#xff0c;简单前端模版。覆盖产品&#xff0c;订单&#xff0c;技师&#xff0c;招聘&#xff0c;充值&#xff0c;优惠等功能。 东郊到家小程序同城预约上门小程序的功能非常齐全&#xff0c;包括商家入驻、服务查询、订单管理、用户评价等&…