2.3 数组与字符串

在这里插入图片描述

学习目标

  • 理解数组和字符串的概念(存储多个数据的“盒子”)。
  • 掌握数组的声明、初始化和遍历方法。
  • 能用字符串处理简单文本问题(如字符计数、回文判断)。

1 一维数组

基本概念
  • 比喻
    • 数组就像“储物柜”,每个格子有编号(索引),存放不同的物品(数据)。
    • 索引从 0 开始(第一个元素是 arr[0],第二个是 arr[1])。
声明与初始化
// 声明一个长度为5的整型数组
int scores[5];  // 声明并初始化
int numbers[3] = {10, 20, 30};  
示例1:班级平均分计算
int scores[5] = {80, 90, 85, 70, 95};  
int sum = 0;  
for (int i = 0; i < 5; i++) {  sum += scores[i];  
}  
cout << "平均分:" << sum / 5.0;  

运行结果

平均分:84
示例2:找最大值
int arr[5] = {3, 9, 2, 7, 5};  
int max = arr[0];  
for (int i = 1; i < 5; i++) {  if (arr[i] > max) max = arr[i];  
}  
cout << "最大值是:" << max;  

运行结果

最大值是:9

2 字符串基础

两种表示方式
  1. 字符数组(C风格字符串)
char name[10] = "Alice";  // 最后自动添加 '\0'  
  1. string类(更简单)
#include <string>  
string city = "Beijing";  
常用操作
操作代码示例
获取长度s.length()s.size()
访问字符s[0](第一个字符)
字符串拼接s1 + s2(如 “Hello” + “World”)
示例1:字符计数
string sentence = "I love coding!";  
int count = 0;  
for (int i = 0; i < sentence.length(); i++) {  if (sentence[i] == 'o') count++;  
}  
cout << "字母o出现了" << count << "次";  

运行结果

字母o出现了2次
示例2:回文判断
string word = "level";  
bool isPalindrome = true;  
for (int i = 0; i < word.length() / 2; i++) {  if (word[i] != word[word.length() - 1 - i]) {  isPalindrome = false;  break;  }  
}  
cout << (isPalindrome ? "是回文!" : "不是回文!");  

运行结果

是回文!

3 常见错误 & 调试技巧

易错点
  1. 数组越界
int arr[3] = {1, 2, 3};  
cout << arr[3];  // ❌ 索引只能是0、1、2  
  1. 字符数组未预留空间
char str[5] = "Hello";  // ❌ "Hello"需要6个字符(含'\0')  
  1. **混淆 = 和 **==
if (s = "abc") { ... }  // ❌ 应写为 s == "abc"  
调试技巧
  • 打印数组内容:
for (int i=0; i<5; i++) cout << arr[i] << " ";  
  • 使用 getline 读取含空格的字符串:
string input;  
getline(cin, input);  // 可以读取整行(包括空格)  

4 练习与挑战

基础练习

  1. 统计元音字母:输入一个句子,统计元音字母(a、e、i、o、u)的数量。
  2. 反转数组:将数组 {1, 2, 3, 4, 5} 反转为 {5, 4, 3, 2, 1} 并输出。

进阶挑战

  1. “贪吃蛇”地图:用二维数组表示游戏地图(# 代表墙,. 代表空地),并输出地图。
char map[5][5] = {  {'#','#','#','#','#'},  {'#','.','.','.','#'},  {'#','.','@','.','#'},  // @代表食物  {'#','.','.','.','#'},  {'#','#','#','#','#'}  
};  
  1. “单词猜谜”游戏:用字符串存储一个单词(如 “apple”),玩家每次猜一个字母,显示已猜中的位置(如 a _ _ _ _)。

总结

知识点关键内容
数组用索引访问元素,适合存储固定数量的数据。
字符串使用 string 类简化操作(如拼接、长度获取)。
常见问题数组越界、字符数组空间不足、字符串比较错误。
应用场景成绩统计、文本处理、简单游戏开发。

下一部分函数与模块化编程 —— 把代码变成“积木块”!


互动小课堂

活动设计

  1. “储物柜大挑战”
    • 用纸盒模拟数组,每个格子贴上编号(0-4),让学生将写有数字的纸条放入对应格子。
    • 任务:找出最大值、计算总和。
  2. “回文侦探”
    • 分组比赛,看哪组能最快找出教室中的回文词(如“妈妈”、“noon”、“上海自来水来自海上”)。

通过结合动手实践和生活场景,帮助少儿直观理解数组和字符串的抽象概念!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/89110.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/89110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 网口demo

bool _testStatus false; private void btnOpsStart_Click(object sender, EventArgs e) {int delay Convert.ToInt32(txtdelay.Text.Trim());txtView.Clear();txtView.AppendText("******************************************开始烤机*******************************…

MATLAB 安装 ACADO 的完整步骤

✅ MATLAB 安装 ACADO 的完整步骤 &#x1f4e6; 一、准备工作 1. 下载 ACADO Toolkit 官方地址&#xff1a;https://github.com/acado/acado 2. 解压 ACADO 到你指定的路径&#xff0c;例如&#xff1a; D:\user\acado-master建议路径中 不要包含中文或空格。 &#x1f9f…

[逆向工程]160个CrackMe入门实战之Afkayas.1.Exe解析(二)

[逆向工程]160个CrackMe入门实战之Afkayas.1.Exe解析&#xff08;二&#xff09; 一、前言 在逆向工程的学习路径上&#xff0c;CrackMe程序是初学者最好的练手材料。今天我们要分析的是160个CrackMe系列的第二题——Afkayas.1.Exe。这个程序由Afkayas编写&#xff0c;难度为★…

本地电脑安装Dify|内网穿透到公网

1.安装Docker Docker: Accelerated Container Application Development 2.添加 PATH 3.安装Dify https://github.com/langgenius/dify.git 把.env.example文件名改为.env 4.更换镜像源 {"builder": {"gc": {"defaultKeepStorage": "20G…

数据结构自学Day6 栈与队列

1. 栈其实栈与队列仍然属于线性表&#xff08;有n个元素构成的集合&#xff0c;逻辑结构呈现线形&#xff09;线形表&#xff1a;顺序表&#xff0c;链表&#xff0c;栈&#xff0c;队列&#xff0c;串&#xff08;字符串&#xff09;栈&#xff08;Stack&#xff09;是一种线性…

Java 异常处理详解:从基础语法到最佳实践,打造健壮的 Java 应用

作为一名 Java 开发工程师&#xff0c;你一定遇到过运行时错误、空指针异常、文件找不到等问题。Java 提供了强大的异常处理机制&#xff0c;帮助我们优雅地捕获和处理这些错误。本文将带你全面掌握&#xff1a;Java 异常体系结构try-catch-finally 的使用throw 与 throws 的区…

Fiddler弱网测试实战指南

Fiddler是一个常用的网络抓包工具&#xff0c;它也可以用来模拟弱网环境进行测试。 在测试时需要用到弱网测试&#xff0c;也就是在信号差、网络慢的情况下进行测试。比如&#xff0c;用户在地铁、电梯、地下车库等场景经常会遇到会话中断、超时等情况&#xff0c;这种就属于弱…

解决Vue页面黑底红字遮罩层报错:Unknown promise rejection reason (webpack-internal)

vue前端页面弹出黑底红色报错遮罩层报错&#xff1a;具体报错信息&#xff1a;Uncaught runtime errors: ERROR Unknown promise rejection reasonat handleError (webpack-internal:///./node_modules/webpack-dev-server/client/overlay.js:299:58)at eval (webpack-internal…

构建 Go 可执行文件镜像 | 探索轻量级 Docker 基础镜像(我应该选择哪个 Docker 镜像?)

文章目录构建 Go 可执行文件镜像典型用途探索轻量级 Docker 基础镜像构建 Go 可执行文件镜像 golang:1.23.0-bullseye 是官方 Go 镜像的一个 “build-stage” 版,用来构建 Go 可执行文件&#xff0c;而不是把它当成最终运行镜像。 dockerhub官方&#xff1a;https://hub.dock…

链表算法之【回文链表】

目录 LeetCode-234题 LeetCode-234题 给定一个单链表的头节点head&#xff0c;判断该链表是否为回文链表&#xff0c;是返回true&#xff0c;否则返回false class Solution {/*** 这里的解题思路为&#xff1a;* (1)、找中间节点* (2)、反转链表* (3)、遍历比较节点值是否相…

Playwright Python 教程:网页自动化

1. 常用工具简介及对比主流网页自动化工具对比工具支持语言浏览器支持特点适用场景PlaywrightPython, JS, .NETChromium, Firefox, WebKit跨浏览器、速度快、API简洁自动化测试、爬虫、网页操作Selenium多语言所有主流浏览器历史悠久、社区大传统自动化测试、兼容性测试Puppete…

动态数组:ArrayList的实现原理

动态数组&#xff1a;ArrayList的实现原理 大家好&#xff01;今天我们来聊聊Java集合框架中一个非常重要的数据结构——ArrayList。就像我们日常生活中使用的伸缩收纳盒一样&#xff0c;ArrayList可以根据需要自动调整大小&#xff0c;既方便又高效。那么它是如何实现这种&quo…

MIPI DSI(五) DBI 和 DPI 格式

关于 DBI 和 DPI 这两种格式的详细协议内容&#xff0c;请参考《MIPI Alliance Standard for Display Bus Interface&#xff08;V2.0&#xff09; .pdf》和《MIPI Alliance Standard for Display Pixel Interface&#xff08;DPI- 2&#xff09; .pdf》这两份文档。首先先了解…

FRP Ubuntu 服务端 + MacOS 客户端配置

一、服务端配置 1、下载frp并解压 # 创建目录并进入 mkdir -p /opt/frp && cd /opt/frp # 下载最新版&#xff08;替换URL为GitHub发布页最新版本&#xff09; wget https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz # 解压 …

Video Python(Pyav)解码二

在 PyAV 中&#xff0c;input_container.decode() 和 input_container.demux() 是两种处理视频流数据的不同方法&#xff0c;它们分别适用于不同的场景。下面通过代码示例和对比来详细说明它们的用法和区别。1. input_container.decode()功能直接解码&#xff1a;从容器中读取数…

闲庭信步使用图像验证平台加速FPGA的开发:第十六课——图像五行缓存的FPGA实现

&#xff08;本系列只需要modelsim即可完成数字图像的处理&#xff0c;每个工程都搭建了全自动化的仿真环境&#xff0c;只需要双击top_tb.bat文件就可以完成整个的仿真&#xff0c;大大降低了初学者的门槛&#xff01;&#xff01;&#xff01;&#xff01;如需要该系列的工程…

头文件与源文件及区别

使用场景上的区别头文件&#xff1a;变量的声明&#xff0c;函数的声明&#xff0c;宏的定义&#xff0c;类的定义等。 源文件&#xff1a;变量的定义。函数的定义实现&#xff0c;类成员函数的定义实现等。这样方便于我们去管理、规划&#xff0c;更重要的是避免了重定义的问题…

图机器学习(4)——图机器学习与嵌入算法

图机器学习&#xff08;4&#xff09;——图机器学习与嵌入算法0. 前言1. 图机器学习1.1 机器学习基本原理1.2 图机器学习的独特优势2. 广义图嵌入问题3. 图嵌入算法分类小结0. 前言 机器学习是人工智能的一个重要分支&#xff0c;它致力于让系统能够从数据中自主学习并持续优…

网络基础10--ACL与包过滤

一、ACL 定义与核心功能ACL&#xff08;访问控制列表&#xff09;是通过规则匹配实现数据包过滤或分类的核心技术&#xff0c;广泛应用于包过滤、NAT、QoS、路由策略等场景。其核心由规则条目组成&#xff0c;每条规则包含匹配条件&#xff08;如源 / 目 IP、端口、协议&#x…

Web安全 - 基于 SM2/SM4 的前后端国产加解密方案详解

文章目录概述一、背景与法规要求二、算法选型三、核心流程四、前端实现要点&#xff08;伪代码&#xff09;五、后端实现要点(伪代码)六、公钥存储策略七、全流程示例图八、总结与最佳实践推荐概述 随着信息安全法规日益严格&#xff0c;如《网络安全法》《数据安全法》和等保…