Administrator
发布于 2026-06-22 / 0 阅读
0
0

C++ 一维、二维数组、字符数组与基础字符串操作实战

一、前言

前面循环章节适合批量重复逻辑,数组用于批量存储同类型数据,无需定义几十个独立变量。本篇覆盖一维数组、二维数组、字符数组,配套遍历、赋值、查找、排序基础案例,为后续指针、字符串铺垫。

二、一维数组基础

1. 定义语法

cpp

运行

数据类型 数组名[数组长度];
// 示例:存储5个学生分数
int score[5];

限制:数组长度必须是常量,不能用变量定义长度(C99 变长数组除外,标准 C++ 不推荐)。

2. 数组初始化三种写法

cpp

运行

// 写法1:全部赋值
int arr1[3] = {10,20,30};
// 写法2:部分赋值,剩余元素自动补0
int arr2[5] = {1,2}; // arr2[2]=0 arr2[3]=0 arr2[4]=0
// 写法3:省略长度,编译器自动根据初始化数量判定长度
int arr3[] = {5,6,7,8}; // 长度自动为4

3. 数组下标访问与遍历

数组下标从0开始,最大下标 = 数组长度 - 1

cpp

运行

#include <iostream>
using namespace std;
int main()
{
    int arr[5] = {11,22,33,44,55};
    // for循环完整遍历数组
    for(int i = 0; i < 5; i++)
    {
        cout << arr[i] << " ";
    }
    return 0;
}

4. 实战:求数组最大值、平均值

cpp

运行

int arr[6] = {85,92,78,90,66,88};
int max = arr[0];
int sum = 0;
for(int i = 0; i < 6; i++)
{
    if(arr[i] > max) max = arr[i];
    sum += arr[i];
}
double avg = sum / 6.0;
cout << "最高分:" << max << " 平均分:" << avg;

三、二维数组(表格 / 矩阵数据)

1. 定义与初始化

cpp

运行

// 行3行,每行4列
int table[3][4] = {
    {1,2,3,4},
    {5,6,7,8},
    {9,10,11,12}
};

2. 嵌套循环遍历二维数组

cpp

运行

for(int i = 0; i < 3; i++)
{
    for(int j = 0; j < 4; j++)
    {
        cout << table[i][j] << "\t";
    }
    cout << endl;
}

适用场景:学生多科目成绩、矩阵运算、棋盘数据存储。

四、字符数组(C 风格字符串)

1. 基础定义

C 语言风格字符串本质是\0空字符结尾的 char 数组

cpp

运行

// 自动末尾补'\0'
char str1[] = "hello";
// 手动赋值字符,必须手动添加结束符
char str2[6] = {'a','b','c','d','e','\0'};

2. 输入输出字符数组

cpp

运行

#include <iostream>
using namespace std;
int main()
{
    char name[20];
    cout << "输入姓名:";
    cin >> name;
    cout << "你的姓名:" << name;
    return 0;
}

⚠️ 缺陷:cin 读取遇到空格自动截断,带空格文本无法完整读取。

3. cstring 库字符串工具函数

引入头文件 #include <cstring>

cpp

运行

char str[30] = "coding";
strlen(str);  // 获取字符串有效长度(不含\0)
strcpy(str, "new text"); // 字符串拷贝
strcat(str, "_cpp");     // 字符串拼接
strcmp(str1, str2);      // 字符串比较,相等返回0

五、std::string 标准字符串(C++ 推荐)

字符数组操作繁琐,string是封装好的字符串类,无需关心结束符、长度。

1. 基础用法

cpp

运行

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s1 = "C++学习";
    string s2 = "数组与字符串";
    // 拼接直接用+
    string s3 = s1 + " " + s2;
    cout << s3 << endl;
    // 获取长度
    cout << "字符串长度:" << s3.size() << endl;
    // 按下标访问单个字符
    cout << s3[0];
    return 0;
}

2. string 常用成员方法

cpp

运行

string text = "HelloCPlus";
text.size();        // 返回字符数量
text.empty();       // 判断是否为空字符串
text.substr(1,3);   // 截取:从下标1开始,取3个字符
text.find("CPlus"); // 查找子串,返回下标,找不到返回-1
text.replace(0,5,"Hi"); // 替换指定区间文本

3. 读取带空格的整行文本

cpp

运行

string msg;
cout << "输入一段带空格文字:";
getline(cin, msg);
cout << msg;

六、新手高频易错点

  1. 数组下标越界:访问arr[5]但数组仅长度 5(最大下标 4),程序崩溃或乱码

  2. 字符数组忘记\0结束符,输出乱码

  3. 使用==直接比较 char 数组,无法正确匹配;char 数组必须用strcmp,string 可以直接==

  4. 用变量定义数组长度,标准 C++ 编译报错

  5. cin读取字符串空格截断,带空格内容改用getline

七、综合实战:学生姓名 + 分数存储查询

cpp

运行

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

int main()
{
    string name[4] = {"小明","小红","小李","小张"};
    int score[4] = {95,88,72,91};
    string searchName;
    cout << "输入要查询的学生姓名:";
    cin >> searchName;
    bool findFlag = false;
    for(int i = 0; i < 4; i++)
    {
        if(name[i] == searchName)
        {
            cout << searchName << " 的分数:" << score[i] << endl;
            findFlag = true;
            break;
        }
    }
    if(!findFlag)
    {
        cout << "未找到该学生信息";
    }
    return 0;
}

八、下期预告

下一篇:C++ 函数完整教程:定义、形参实参、函数重载、作用域、递归入门


评论