C语言-数组和字符串

person c猿人    watch_later 2024-07-29 18:12:35
visibility 130    class 数组和字符串    bookmark 专栏

在C语言中,数组和字符串是两个重要的数据结构。数组是一组具有相同数据类型的元素集合,而字符串则是以字符数组形式存在的文本序列。理解和使用数组和字符串是学习C语言的基础之一。

数组

数组的定义与初始化

数组是存储在连续内存位置的相同类型数据的集合。可以通过以下方式定义和初始化数组:

定义数组

data_type array_name[array_size];
  • data_type:数组中元素的数据类型。
  • array_name:数组的名称。
  • array_size:数组的大小,必须是正整数常量。

初始化数组

可以在定义数组时直接初始化数组元素。

int numbers[5] = {1, 2, 3, 4, 5};

如果初始化的元素个数少于数组大小,剩余的元素会被自动初始化为零。

int numbers[5] = {1, 2};  // 剩余元素初始化为0

数组的访问

数组中的元素通过索引访问,索引从0开始。

int numbers[5] = {1, 2, 3, 4, 5};
printf("%d\n", numbers[0]); // 输出第一个元素

数组的使用示例

遍历数组

#include <stdio.h>

int main() {
    int numbers[5] = {10, 20, 30, 40, 50};

    // 遍历数组
    for (int i = 0; i < 5; i++) {
        printf("Element %d: %d\n", i, numbers[i]);
    }

    return 0;
}
  • 输出:
    Element 0: 10
    Element 1: 20
    Element 2: 30
    Element 3: 40
    Element 4: 50
    

求数组元素的和

#include <stdio.h>

int main() {
    int numbers[5] = {10, 20, 30, 40, 50};
    int sum = 0;

    // 计算数组元素的和
    for (int i = 0; i < 5; i++) {
        sum += numbers[i];
    }

    printf("数组元素的和: %d\n", sum);

    return 0;
}
  • 输出:
    数组元素的和: 150
    

多维数组

C语言支持多维数组,多维数组是数组的数组。

定义二维数组

data_type array_name[rows][columns];
  • rows:数组的行数。
  • columns:数组的列数。

二维数组初始化

可以在定义时对二维数组进行初始化。

int matrix[2][3] = {
    {1, 2, 3},
    {4, 5, 6}
};

访问二维数组元素

二维数组中的元素通过两个索引访问。

int matrix[2][3] = {
    {1, 2, 3},
    {4, 5, 6}
};

printf("%d\n", matrix[0][1]);  // 输出2

遍历二维数组

#include <stdio.h>

int main() {
    int matrix[2][3] = {
        {1, 2, 3},
        {4, 5, 6}
    };

    // 遍历二维数组
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    return 0;
}
  • 输出:
    1 2 3 
    4 5 6 
    

字符串

在C语言中,字符串是以null字符 (\0) 结尾的字符数组。

字符串的定义与初始化

定义字符串

可以使用字符数组或字符串常量来定义字符串。

char str1[] = {'H', 'e', 'l', 'l', 'o', '\0'};
char str2[] = "Hello";

字符串的输入输出

C语言提供了一些用于字符串输入输出的函数。

使用printfscanf输出和输入字符串

#include <stdio.h>

int main() {
    char str[100];

    // 输入字符串
    printf("请输入字符串: ");
    scanf("%s", str);

    // 输出字符串
    printf("您输入的字符串是: %s\n", str);

    return 0;
}
  • 注意:scanf读取字符串时遇到空格或换行符会停止读取。

使用getsputs输入输出字符串

#include <stdio.h>

int main() {
    char str[100];

    // 输入字符串
    printf("请输入字符串: ");
    gets(str);

    // 输出字符串
    printf("您输入的字符串是: ");
    puts(str);

    return 0;
}
  • 注意:gets函数不安全,可能导致缓冲区溢出,建议使用fgets

使用fgets安全地输入字符串

#include <stdio.h>

int main() {
    char str[100];

    // 输入字符串
    printf("请输入字符串: ");
    fgets(str, sizeof(str), stdin);

    // 输出字符串
    printf("您输入的字符串是: %s", str);

    return 0;
}

字符串处理函数

C语言标准库提供了一些用于字符串处理的函数,如strlenstrcpystrcatstrcmp等。

计算字符串长度

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

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

    printf("字符串长度: %d\n", length);

    return 0;
}
  • 输出:
    字符串长度: 13
    

字符串复制

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

int main() {
    char source[] = "Hello";
    char destination[20];

    // 复制字符串
    strcpy(destination, source);

    printf("复制后的字符串: %s\n", destination);

    return 0;
}
  • 输出:
    复制后的字符串: Hello
    

字符串连接

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

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

    // 连接字符串
    strcat(str1, str2);

    printf("连接后的字符串: %s\n", str1);

    return 0;
}
  • 输出:
    连接后的字符串: Hello, World!
    

字符串比较

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

int main() {
    char str1[] = "Hello";
    char str2[] = "World";

    // 比较字符串
    int result = strcmp(str1, str2);

    if (result == 0) {
        printf("字符串相等\n");
    } else if (result < 0) {
        printf("字符串1小于字符串2\n");
    } else {
        printf("字符串1大于字符串2\n");
    }

    return 0;
}
  • 输出:
    字符串1小于字符串2
    

小结

数组和字符串是C语言中的重要数据结构。数组用于存储多个相同类型的元素,而字符串是以\0结尾的字符数组。通过熟练使用数组和字符串,可以处理各种复杂的数据和文本操作。

如果有任何问题或者需要更多详细解释,请随时告诉我!

评论区
评论列表
menu