VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 9531|回复: 150

《实用C++》第20课 字符数组

  [复制链接]
51_avatar_middle
最佳答案
8 
online_admins 发表于 2018-1-14 17:19:29 | 显示全部楼层 |阅读模式
1、什么是字符数组?
说白了,字符数组就是数组中存放的是字符,即 char 类型。例如:char szbuf[50];
因为字符串本身就是有一个一个的字符组合而成的,所以,字符数组可以理解为是一个字符串。在以后的C++编程过程中会遇到各种各样对字符串的操作。

2、字符数组的初始化:
方式①:定义之后分别对每个字符初始化;
  1. char szbuf[10];
  2. szbuf[0] = 'h';
  3. szbuf[1] = 'e';
  4. szbuf[2] = 'l';
  5. szbuf[3] = 'l';
  6. szbuf[4] = 'o';
复制代码

备注:未初始化的部分值随机。

方式②:定义即初始化:
  1. char szbuf[10] = {'h', 'e', 'l', 'l', 'o'};
复制代码

或者:
  1. char szbuf[10] = "hello";
复制代码

备注:未初始化的部分值为0.

注意:
如果初始值的个数小于数组的长度,则只将这些字符赋值给数组中前面的那些元素,其余元素自动赋值为 \0 字符,也就是0;
如果初始值的个数大于数组的长度,则直接报语法错误。

方式③、自动初始化长度:
  1. char szbuf[] = {'h', 'e', 'l', 'l', 'o', ' ', 'f', 'r', 'i', 'e', 'n', 'd', 's', ' ', 'I', ' ', 'a', 'm', ' ', 'c', 'c', 't', 'r', 'y', '.', 'c', 'o', 'm'};
复制代码

如果字符串的长度比较长,而且要定义的数组长度就是字符串的长度,那么就可以使用此方法。

或者:
  1. char szbuf[] = "hello friends I am cctry.com";
复制代码


3、字符数组与字符串的区别:
区别就是字符串比字符数组多了一个结束标志的字符:'\0',这个字符的ASCII码就是0,所以作为一个字符串来说,其有效字符就是结束标志\0之前的字符。字符串的长度也是结束标志\0之前的字符,但是字符串所占用的字节数或者说字符串所占用的空间是包含字符串结束标志\0的。所以一般情况下关于一个字符串的长度不用很显示的给出或者告诉,直接对当前字符串从头往后找结束标志\0就可以了,遇到了就表示这个字符串结束了。
例如:
  1. char szbuf[5];
  2. szbuf[0] = 'h';
  3. szbuf[1] = 'e';
  4. szbuf[2] = 'l';
  5. szbuf[3] = 'l';
  6. szbuf[4] = 'o';
复制代码

这个就是个字符数组,不是字符串,因为结尾没有字符串结束的标志\0,但是如果我这样定义:
  1. char szbuf[6];
  2. szbuf[0] = 'h';
  3. szbuf[1] = 'e';
  4. szbuf[2] = 'l';
  5. szbuf[3] = 'l';
  6. szbuf[4] = 'o';
  7. szbuf[5] = '\0';
复制代码

这个字符数组就可以看成是一个字符串,因为他满足字符串的所有条件。

再来看一个例子:定义即初始化:
  1. char szbuf[10] = {'h', 'e', 'l', 'l', 'o'};
复制代码

因为数组的长度是10,hello5个字符的长度是5,所以之后剩下的5个未被初始化的字符会置为0,所以这种方式满足字符串的条件。
或者:
  1. char szbuf[10] = "hello";
复制代码

这种方式使用一个字符串来初始化字符数组,因为用字符串来进行初始化,所以会把字符串结束标志\0一并初始化给字符数组szbuf的,所以这种方式也满足字符串的条件。

4、字符数组的输入与输出:
举例①:
  1. char szbuf[50];
  2. cin >> szbuf;
  3. cout << szbuf << endl;
复制代码


举例②、
  1. char szbuf[50] = {'h', 'e', 'l', 'l', 'o', '\0', ' ', 'f', 'r', 'i', 'e', 'n', 'd', 's', '.'};
  2. cout << szbuf << endl;
复制代码

大家猜猜会输出什么内容呢?

5、小作业:
题目:字符数组定义如下:
  1. char szbuf[100] = "hello, friends, my name is cctry.com. what is your name ?";
复制代码

遍历字符数组 szbuf,将其中的字符 i 替换成 @ 符号,并统计其个数。最后将统计的个数及整个字符串的内容都输出出来?
大家试试吧!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
教程在线观看地址:
https://www.bilibili.com/video/av38388453/?p=22
MP4高清视频下载地址:链接:https://pan.baidu.com/s/1Pq10HXv7ixDYmlMuantAjg 提取码:jyi4
本节课件下载(回复后可见):
游客,如果您要查看本帖隐藏内容请回复

备注:VIP会员可免费下载本站所有资源(点击查看)
提示:通过购买VC驿站U盘打包(点击查看)也可加入终身Vip会员^_^




上一篇:《实用C++》第19课 数组与一维数组
下一篇:《实用C++》第21课 使用字符串处理函数操作字符数组
98_avatar_middle
最佳答案
0 
在线会员 发表于 2019-2-15 15:12:00 | 显示全部楼层
#include <iostream>
using namespace std;

void main()
{
        char szbuf[] = "hello, friends, my name is cctry.com. what is your name ?\0";
        int j = 0;

        for (j = 0; j < 59;j++)
        {
                if (szbuf[j] == 'i')
                szbuf[j] = '@';

        }
        cout << szbuf << endl;
}

贴下我的答案,多谢老师的教程
78_avatar_middle
最佳答案
0 
在线会员 发表于 2018-1-17 10:17:36 | 显示全部楼层
又更新了,不错,谢谢
75_avatar_middle
最佳答案
0 
在线会员 发表于 2018-1-25 20:02:55 | 显示全部楼层
快过年了支持老师明年继续出教程!
94_avatar_middle
最佳答案
0 
online_vip 发表于 2018-1-27 11:05:30 | 显示全部楼层
快过年了支持老师明年继续出教程!
80_avatar_middle
最佳答案
0 
在线会员 发表于 2018-2-5 21:57:34 | 显示全部楼层
更新了,继续学习
89_avatar_middle
最佳答案
0 
在线会员 发表于 2018-2-5 22:28:52 | 显示全部楼层
学习字符数组~
13_avatar_middle
最佳答案
0 
online_vip 发表于 2018-2-5 23:21:33 | 显示全部楼层
HELLO WORLD
98_avatar_middle
最佳答案
0 
在线会员 发表于 2018-2-6 09:15:44 | 显示全部楼层
楼主辛苦了
95_avatar_middle
最佳答案
0 
online_vip 发表于 2018-2-6 09:52:27 | 显示全部楼层
收下,谢谢
51_avatar_middle
最佳答案
0 
online_vip 发表于 2018-2-6 10:07:19 | 显示全部楼层
学习一下
16_avatar_middle
最佳答案
0 
online_vip 发表于 2018-2-7 02:37:09 | 显示全部楼层
ddddddddddddd
32_avatar_middle
最佳答案
0 
在线会员 发表于 2018-2-7 13:38:18 | 显示全部楼层
楼主辛苦了
74_avatar_middle
最佳答案
0 
在线会员 发表于 2018-2-7 18:26:58 | 显示全部楼层
看看      
65_avatar_middle
最佳答案
0 
在线会员 发表于 2018-2-8 10:09:22 | 显示全部楼层

快过年了支持老师明年继续出教程!
18_avatar_middle
最佳答案
0 
online_vip 发表于 2018-2-9 08:07:01 | 显示全部楼层
学习学习
22_avatar_middle
最佳答案
0 
online_vip 发表于 2018-2-10 12:54:36 | 显示全部楼层
快过年了支持老师明年继续出教程!
07_avatar_middle
最佳答案
0 
在线会员 发表于 2018-2-11 08:31:54 | 显示全部楼层
天天学习
49_avatar_middle
最佳答案
0 
在线会员 发表于 2018-2-11 21:04:29 | 显示全部楼层
rhf rhf rhf
07_avatar_middle
最佳答案
0 
在线会员 发表于 2018-2-12 13:25:39 | 显示全部楼层
再复习一下;讲得真的很透彻,非常好
10_avatar_middle
最佳答案
0 
在线会员 发表于 2018-2-13 20:14:31 | 显示全部楼层
紧跟老大的脚步,继续学习
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-11-18 18:23

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表