第四节 数组与字符串

1. 数组

数据在计算中的存储位置有许多种方法,变量的存储位置是内存中的随机位置,如果将变量在内存中按顺序排列,形成一块连续的存储空间。这一组变量就是数组。

需要注意的是,这一组数据中变量的数量必须是固定的,并且他们的类型必须相同。

整数的数组只能用来存整数,字符的数组只能用来存字符(字符数组与字符串并不相同)

复制代码
//声明一个变量
type varName;
//为变量赋值
varName = value;

//变量的例子
//声明一个整数变量并赋值
int a = 5;

//声明一个数组
type arrayName[dimension];
//为数组赋值
//例子
int intList[5];
intList[0] = 2;
intList[1] = 5;
intList[2] = 33;
intList[3] = 3;
intList[4] = 5;
//注意数组的下标从0开始
//因此数组中的最后一个元素是intList[4]而不是intList[5]

//数组也可以在声明时同时被赋值
int intList[5] = {0, 4, 2, 5, 6, 7};
int intList[5] = {4};
int intList[] = {4, 7, 11, 32, 22};
复制代码

 

复制代码
#include <iostream>
using namespace std;

int main() {

    int arr[4];

    cout << "请输入4个整数:" << endl;

    for (int i = 0; i < 4; i++)
        cin >> arr[i]; //为数组中的元素赋值

        cout << "Values in array are now:";

    for (int i = 0; i < 4; i++)
        cout << " " << arr[i]; //显示数组中元素的值

        cout << endl;

    return 0;
}
复制代码

 

复制代码
#include <iostream>

using namespace std;

int main() {
    //声明一个整型数组,里面包含500个元素
    int a[500] = { 0 };
    int sum = 0;

    //初始化数组
    for (int i = 0; i < 500; i++)
    {
        //a[0] = 0 + 1; a[1] = 1 + 1; ...
        a[i] = i + 1;
    }

    //获取数组中的元素值
    for (int i = 0; i < 500; i++)
    {
        //x = x + y可以简写为x+=;
        sum += a[i];
    }

    cout << sum;

    return 0;
}
复制代码
复制代码
#include <iostream>
#include <string>
using namespace std;

//将数组作为函数的参数使用
string findStudent(string NameList[], int studentID) {
    
    NameList[0] = "修改后的姓名";

    if (studentID >= 0 && studentID <= 3)
        return NameList[studentID];
    else
        return "学号输入错误";
}

int main() {

    string studentName[] = { "王大壮", "李二胖", "王小川", "赵成以" };
    int ID = 0;

    cout << "请输入学生学号:" << endl;
    cin >> ID;
    cout << "学生姓名为:" << findStudent(studentName, ID) << endl;

    //特别注意数组的作用域
    cout << studentName[0];
    return 0;
}
复制代码
复制代码
//获取数组的长度

int main()
{
    int a[] = { 1,2,3 };

        //sizeof函数用来获取变量在内存中的大小
    int alength = sizeof(a) / sizeof(a[0]);
}
复制代码

 

2. 多维数组

type arrayName[dimension1][dimension2]...;
复制代码
#include <iostream>
#include <string>
using namespace std;


int main() {

    //声明二维数组,声明二维数组时
    //多维数组创建时,注意大括号的数量
    string studentName[2][4] = { {"00000001", "00000002", "00000003", "00000004"}, {"张振","李逵","王三雪","付灵惠" } };

    //二维数数组的访问
    cout << studentName[1][3] << endl;

    string studentID = "";
    cout << "请输入学号:";
    cin >> studentID;
    
    for (int i = 0; i < 4; i++)
    {
        if (studentName[0][i] == studentID)
        {
            cout << "学生姓名为:" << studentName[1][i];
            break;
        }
    }

    return 0;
}
复制代码

3. 字符串

复制代码
#include <iostream>
//字符串类型所在的库
#include <string>
//一些处理字符串的工具函数
//除此以外还有cstring库也可以用来处理字符串,如:拷贝、查找、替换
#include <cctype>
using namespace std;


int main() {
    //单个字符
    char letter = 'a';

    //只含有一个字符的字符数组
    char letterList[] = { 'a' };

    //当字符数组的最后一个元素是结束符'\0'时,这个字符数组就是字符串
    char letterString[] = { 'a', '\0' };
    
    //直接使用字符串时,要使用双引号,双引号会自动在句子的末尾添加结束符
    string String = "a";

    //以下两种声明的内容相同,但是第一个声明的是字符数组,第二个声明的是字符串
    char helloList[] = "Hello, World!";
    string helloString = "Hello, World!";

    //一些对字符串的操作 is-
    //来自cctype库 c-char-type
    cout << "H is captain? : " << isupper(helloString[0]) << " to lower is: " << (char)tolower(helloString[0]) << endl;
}
复制代码

4. 练习

复制代码
//创建数组,要求用户输入十个数字
//创建成功后,再次要求用户输入数字,并打印这个数字在数组中的索引
#include <iostream>
using namespace std;

int count(int arr1[10], int numb) {
    int cont = 0;

    for (int u = 0; u < 10; u++) {

        if (arr1[u] == numb)
            cont = cont + 1;
    }
    return cont;
}

int main() {

    int arr[10]; int num;
    cout << "请输入10个数字:";

    for (int i = 0; i < 10; i++)
        cin >> arr[i];

    cout << "数组中的数字为:";

    for (int i = 0; i < 10; i++)
        cout << " " << arr[i];

    cout << "\n" << "请输入要查找的数字:";
    cin >> num;

    cout << num << " 的索引位:" << count(arr, num);


    return 0;
}
复制代码

 

复制代码
//完成向整型数组中动态增加元素
//数组的长度可以通过 sizeof(array) / sizeof(array[0])进行计算
//sizeof函数用来计算参数在内存中占用的空间大小
#include <iostream>
using namespace std;

int main()
{
    int insertValue = 5;
    int insertIndex = 0;

    //原始数组
    int oldArray[8] = { 0 };
    //插入后的数组
    int newArray[sizeof(oldArray) / sizeof(oldArray[0]) + 1] = { 0 };

    int oldArrayLength = sizeof(oldArray) / sizeof(oldArray[0]);

    //防止越界
    if (insertIndex >= oldArrayLength)
    {
        for (int i = 0; i < oldArrayLength; i++)
        {
            newArray[i] = oldArray[i];
        }
        newArray[oldArrayLength] = insertValue;
    }
    //普通插入
    else
    {
        for (int i = 0; i < insertIndex; i++)
        {
            newArray[i] = oldArray[i];
        }
        //插入
        newArray[insertIndex] = insertValue;
        //后移
        for (int i = insertIndex + 1; i < (oldArrayLength + 1); i++)
        {
            newArray[i] = oldArray[i - 1];
        }
    }

    return 0;
}
复制代码
复制代码
//完成将输入中指定位置元素删除的操作
//必须使用continued关键字
#include <iostream>
using namespace std;

int main()
{
    int deletIndex = 2;

    //原始数组
    int oldArray[4] = { 1, 2, 3, 4 };
    //插入后的数组
    int newArray[sizeof(oldArray) / sizeof(oldArray[0]) - 1] = { 0 };

    int newArrayLength = sizeof(newArray) / sizeof(newArray[0]);


    for (int oldIndex = 0, newIndex = 0; newIndex < newArrayLength; newIndex++, oldIndex++)
    {
        if (oldIndex == deletIndex)
        {
            newIndex--;
            continue;
        }

        newArray[newIndex] = oldArray[oldIndex];;
    }

    return 0;
}
复制代码

 

5. 格式化输出

复制代码
#include <iostream>
using namespace std ;

int main () {
    // 使用转义字符进行排版
    // /0,结束字符串
    // /t,制表符
    // /n,回车换行
    // //,输出'/'
    // /",输出'"'
    cout << "文件地址为:\t\"C:\\C++\\Files\\\"\n";

    // 使用 std::cout 进行格式化输出
    int a = 17 ;
    cout <<"oct : " << oct << a <<endl ;        // 21 : 8 进制
    cout <<"dec : " << dec << a <<endl ;        // 17 : 10 进制
    cout <<"hex : " << hex << a <<endl ;        // 11 : 16 进制
    cout <<"hex : " << hex <<17.01 <<endl ;        // 17.01 : 不受影响
    // 还有其他格式化输出方式,请自行搜索
}
复制代码

 

6.作业

制作班级点名册,可以根据输入的学号,修改、输出学生的出勤信息,

并且提供菜单,菜单内容包括:

1. 修改单个学生信息,包括学号、姓名、出勤。

2. 输出单个学生的信息。

3. 输出所有学生的出勤信息统计。

4. 清屏。

5. 退出程序。

使用二维数组完成。

假定学生人数为5人。

 

posted @   庞兴庆  阅读(277)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示