栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

C++语法基础(5)——数组与字符串

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++语法基础(5)——数组与字符串

文章目录
  • 数组
    • 一维数组
      • 什么是数组
      • 声明数组
      • 访问数组元素
      • 初始化数组
      • 数组输入输出
    • 多维数组
      • 声明二维数组
      • 二维数组访问元素
      • 初始化二维数组
      • 二维数组的输入输出
      • 多维数组的用法![在这里插入图片描述](https://img-blog.csdnimg.cn/ea453ede2dff479682aa77b34f7cb53f.png)
  • 字符串
    • 字符数组
      • 字符数组与字符串
      • 字符数组的输入输出
      • 字符数组型字符串的常用操作

数组 一维数组 什么是数组
  • C++使用数组来实现一次性声明很多变量的功能,具有以下特性:
    • 创建后的数组大小固定
    • 同一数组中的元素类型相同
    • 是一系列数据顺序集合
  • 如果把变量比做一个小盒子,每个盒子里装一个数据。那么,数组就像是一整排的盒子,它可以装大量的数据。
声明数组
  • 在C++中声明数组时,需要指定元素类型、数组名称以及数组长度:
元素类型 数组名称[数组长度];
  • 数组的元素类型只需指定一次,代表整个数组中所有元素的类型
  • 数组长度代表数组容纳元素的数量,必须是一个固定的整型常量,不能是变量
int sales[6];

在声明数组后,内存会为数组分配一块连续的空间。我们可以从内存的角度再来理解一下数组:数组中包含若干个元素,每个元素都是一个变量,因此每个元素都是有地址的,而数组名其实表示的就是第一个元素的起始地址。

访问数组元素
  • 声明一个数组之后,数组中的每个元素可以通过索引来访问
    • 数组的索引的范围是从0到 数组长度-1
    • 数组元素的访问形式是数组名称[索引序号]
cin >> sales[0];, scanf("%d", &sales[0]);
cout << sales[0];, printf("%d ", sales[0]);
sales[0] = 3;
int a = sales[0];
sales[0] += 3;
初始化数组
  • 在C++中,数组的初始化有如下两种方式:
    • 一种初是在声明的同时,使用大括号包含对应数值,直接对整个数组初始化
    • 另一种初始化方式是在声明之后,逐个访问数组元素进行一一初始化赋值
  • 选择直接对整个数组初始化时:
    • 常规int sales[6] = {1, 3, 5, 7, 9, 11}
    • int sales[6] = {1, 3},得到1, 3, 0, 0, 0, 0
    • `int sales[6] = {0} 数组全部初始化为0
    • 可以省略括号中的数组长度 int sales[] = {1, 3, 5, 7, 9, 11}
  • 选择在声明之后对数组中的元素逐个进行初始化赋值时:
int sales[6];
for (int i = 0; i < 6; i++) {
    sales[i] = 2 * i + 1;
}
数组输入输出
  • 在C++中,普通的一维数组只能对单个元素进行输入输出。
int sales[6] = {0};
cin >> sales[0];
scanf("%i", &sales[1]);

cout << sales_4[0];
printf("%i", sales[1]);
多维数组 声明二维数组
元素类型 数组名称[数组第一个维度长度][数组第二个维度长度]
int scores[5][3];
二维数组访问元素

通过scores[1]访问第2个数组,再通过scores[1][2]访问该数组的第3个元素

初始化二维数组
int scores[5][3] = {  
 {8, 4, 6} ,   
 {5, 6, 3} ,   
 {3, 2, 4} ,   
 {8, 7, 6} ,   
 {7, 9, 8} ,   
};

// 或者省略掉第二层的大括号
int scores[5][3] = {8, 4, 6, 5, 6, 3, 3, 2, 4, 8, 7, 6, 7, 9, 8};
int scores[5][3];
for (int i = 0; i < 5; i++) {
    for (int j = 0; j < 3; j++) cin >> scores[i][j];
}
二维数组的输入输出
  • 在C++中,和一维数组一样,普通的二维数组也只能对单个元素进行输入输出。
int scores[5][3] = {0};

cin >> scores[0][0];
scanf("%i", &scores[0][1]);

cout << scores[0][0];
printf("%i", scores[0][1]);
多维数组的用法
  • 小键发现在第二轮,评委1对选手1还没有打分,想要在使用-1初始化后,再通过输入修正分数;
  • 对于修正后的数组,小键需要逐个输出每个选手的得分,并计算输出每位选手的平均得分(向下取整)。
// 声明并初始化得分,第二轮此时评委1对选手1还没有打分
int scores[5][3][2] = {
    {{8, -1}, {4, 3}, {6, 5}},
    {{5, 6}, {6, 5}, {3, 8}},
    {{3, 8}, {2, 9}, {4, 7}},
    {{8, 7}, {7, 5}, {6, 3}},
    {{7, 7}, {9, 7}, {8, 9}}
};

int avg_score, score_sum;

// 通过输入修正分数
scanf("%i", &scores[0][0][1]);

for (int i=0; i<5; i++) {
    score_sum = 0;
    cout << "选手" << (i+1);
    
    // 对该选手的每一轮打印分数并统计平均分
    for (int k=0; k<2; k++){
        cout << "第" << (k+1) << "轮得分:";
        avg_score = 0;
        
        // 计算该选手在该轮的平均分
        for (int j=0; j<3; j++) {
            avg_score += scores[i][j][k];
            cout << scores[i][j][k] << " ";
        }
        cout << endl;
        avg_score /= 3;
        
        // 该选手的总得分加上该轮的平均分
        score_sum += avg_score;
    }
    
    cout << score_sum << endl;
}
字符串

字符串,比如:"XiaoMing"、"LaoWang"和"HanMeimei"等。
由于字符变量能存储一个字符,对于一个字符串,可以用类型是char的数组来存储,这类数组称为字符数组。

  • "abcd’e"字符串中一共有8个字符。其中5个字符是abcde,其余3个是转义字符:反斜杆,’ 单引号和结束标志。
字符数组 字符数组与字符串
  • 由一系列字符组成的一个处理单位称为字符串,如一个单词或一个句子。
    • C++ 中的字符串常量是用一对双引号括起来,由 '' 作为结束符的一组字符。
  • 不含任何字符的字符串称为空字符串,用一对双引号表示,即""。空字符串并不是不占空间,而是占用了 11 字节的空间,这个字节中储存了一个''。
  • 通常用一个字符数组来保存字符串,即所有元素的类型都是字符型的数组
    • 由于字符串以 '' 作为结束符,因此所需的储存空间比实际的字符串长度大1。
      Tips:在 C++ 中,'a' 和 "a" 是不一样的,前者是一个字符常量,在内存中占 1 字节,后者是一个字符串,占 2 字节的空间,第 1 个字节储存了字母 a 的内码值,第二个字节储存了 ''。
  • char userName[11]就可以声明一个名字叫userName的字符数组型字符串,这个数组最多能存放一个长度为10的字符串。
    初始化:
  • 字符数组初始化的程序段(一)
// 第一种:给每个元素指定初始化值
// 依次赋初值,剩下的会默认被初始化为
char userName[11] = {'L', 'a', 'o', 'W', 'a', 'n', 'g', ''};
char userName[11] = {'L', 'a', 'o', 'W', 'a', 'n', 'g'};

// 和普通数组一样,元素个数可以省略,c++会自动识别长度为8
char userName[] = {'L', 'a', 'o', 'W', 'a', 'n', 'g', ''};
  • 第二种是使用字符串常量初始化字符数组
//第二种:使用字符串常量初始化字符数组
char userName[11] = {"LaoWang"};
// 大括号可以省略
char userName[11] = "LaoWang";
字符数组的输入输出
  • 方式一:使用cin和cout
char ch[11];
cin >> ch;
 - 输入的时候,使用`cin`语句,会不断的读入字符串,直到遇到一个空白字符(空格、回车或者制表符)就结束读入
 - 用`cin`向计算机输入一串字符时,输入的字符的数量应该少于已定义的字符数组的长度,否则会出现问题
 - 如果输入的字符的数量小于字符数组长度时,剩下的部分会默认补上`''`
cout << ch;
 - 从字符数组的第一个字符开始输出,直到遇到 `''`(不会输出`''`)
 - 如果一个字符数组中包含一个以上`''`,则遇第一个`''`时`cout`输出就结束
  • 方式二:用scanf printf也可以输入输出字符串
  • 字符的输入用scanf("%c", &变量名),而输入一个字符串用scanf("%s", 数组名)
scanf("%s", userName);
  • 注意,因为是字符串也是一个字符数组,scanf里,数组前不需要加&,只有变量名字需要加&。

  • 字符的输出用 printf("%c", &变量名),而输出一个字符串用printf("%s", 数组名)

printf("%s", userName);
字符数组型字符串的常用操作
  • 连接字符串 使用strcat(s1, s2)函数可以把字符串s2 连接到s1的末尾。
  • 获取字符串长度 使用strlen(s1)函数可以返回字符串s1的有效字符数。比如"yes"的长度就是3。
  • 比较字符串的字典序 使用strcmp(s1, s2)函数可以比较两个字符串之间的字典序:如果s1和s2是相同的,会返回0;如果s1的字典序在s2前面,则返回值会小于0;如果s1的字典序在s2后面,则返回值会大于0。
  • 复制字符串 使用strcpy(s1, s2)函数可以复制字符串 s2到字符串s1。如果s2比s1短,那么s1这个数组后面没被覆盖的部分不会改变。比如s1存的是{q, w, e, r, }, s2存的是{a, s, },那么使用strcpy(s1, s2)后,s1前五位应该是{a, s, , r, }。
  • 字符串替换 用str2替换str1中0~3的位置,3处为空,没有进行替换,实际只替换了0~2的位置,最后str1变为efgd。
string str1 = "abcd";
string str2 = "efg";
str1.replace(0, 3, str2);
cout << str1;
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1004275.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号