十四天学会C++之第三天(数组和字符串)

在这里插入图片描述

1. 数组的定义和初始化

数组是一种由相同数据类型的元素组成的集合,这些元素按照一定的顺序存储在连续的内存位置上。数组的大小在创建时是固定的,无法在运行时改变。

在C++中,数组的定义和声明非常简单。定义一个数组:

数据类型 数组名[数组大小];

数据类型可以是整数、浮点数、字符等,数组名是你为数组取的名字,数组大小表示数组可以容纳的元素数量。示例:

int numbers[5];          // 整数数组,包含5个元素
double temperatures[7];  // 浮点数数组,包含7个元素
char vowels[5];          // 字符数组,包含5个元素

数组的初始化。数组可以在声明时进行初始化,也可以后期赋值。静态初始化是在声明时提供初始值,动态初始化是在声明后使用赋值语句赋初值。

静态初始化:

int numbers[5] = {1, 2, 3, 4, 5}; // 静态初始化,包含5个整数

动态初始化:

double temperatures[7];  // 声明数组
temperatures[0] = 98.6;  // 动态初始化第一个元素
temperatures[1] = 95.5;  // 动态初始化第二个元素
// 以此类推...

2. 数组的基本操作

访问数组元素: 要访问数组中的元素,使用数组名称后跟方括号,方括号中包含元素的索引(从0开始)。访问数组中的第一个元素:

int numbers[5] = {1, 2, 3, 4, 5};
int firstNumber = numbers[0]; // 访问第一个元素

修改数组元素: 修改数组中的元素,使用相同的索引来指定要修改的元素,并分配一个新的值给它。修改数组中的第三个元素:

int numbers[5] = {1, 2, 3, 4, 5};
numbers[2] = 100; // 修改第三个元素的值为100

获取数组长度: C++中,获取数组的长度可以使用sizeof运算符来实现。获取上面数组numbers的长度:

int length = sizeof(numbers) / sizeof(numbers[0]);

返回数组中元素的数量,在循环等操作中控制数组的访问。

数组的遍历: 遍历数组意味着访问数组的每个元素。通过循环来完成,最常见的是使用for循环。遍历数组并打印每个元素的示例:

int numbers[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {cout << numbers[i] << " "; // 打印每个元素
}

3. 字符串的处理

引入字符串的概念: 字符串是一组字符的序列,表示文本数据。在C++中,有两种主要的字符串表示方式:C-风格字符串和C++字符串类。

C-风格字符串: C-风格字符串实际上是字符数组,以空字符'\0'结尾。例如:

char greeting[] = "Hello, World!";

C-风格字符串需要手动处理字符串的长度和内存分配。

C++字符串类: C++提供了一个名为std::string的字符串类,它是C-风格字符串的现代替代品。使用字符串类,可以方便地处理字符串,无需担心内存管理和长度问题。

#include <string>
std::string greeting = "Hello, World!";

字符串的基本操作: 无论是C-风格字符串还是C++字符串类,都支持基本的字符串操作,如拼接、查找子串、比较等。示例:

  • 拼接字符串:
std::string firstName = "John";
std::string lastName = "Doe";
std::string fullName = firstName + " " + lastName;
  • 查找子串:
std::string sentence = "This is a sample sentence.";
size_t found = sentence.find("sample");
if (found != std::string::npos) {std::cout << "Found 'sample' at position " << found << std::endl;
}
  • 比较字符串:
std::string str1 = "apple";
std::string str2 = "banana";
int result = str1.compare(str2);
if (result == 0) {std::cout << "Strings are equal." << std::endl;
} else if (result < 0) {std::cout << "str1 is less than str2." << std::endl;
} else {std::cout << "str1 is greater than str2." << std::endl;
}

4. C-风格字符串和C++字符串类

对比C-风格字符串和C++字符串类:

  • C-风格字符串(字符数组):
    • 使用字符数组表示,以null字符('\0')结尾。
    • 需要手动管理内存和长度。
    • 操作较为繁琐,容易造成越界和内存泄漏。
char greeting[20] = "Hello, World!";
  • C++字符串类 (std::string):
    • 使用现代C++标准库提供的std::string类。
    • 自动管理内存,不需要担心内存分配和释放。
    • 提供丰富的字符串操作方法,更安全和高效。
#include <string>
std::string greeting = "Hello, World!";

C++字符串类的常见操作:

  • 拼接字符串:
std::string str1 = "Hello, ";
std::string str2 = "World!";
std::string greeting = str1 + str2;  // "Hello, World!"
  • 查找子串:
std::string sentence = "This is a sample sentence.";
size_t found = sentence.find("sample");
if (found != std::string::npos) {std::cout << "Found 'sample' at position " << found << std::endl;
}
  • 替换子串:
std::string sentence = "The quick brown fox jumps over the lazy dog.";
sentence.replace(10, 5, "red");  // Replace "brown" with "red"

5. 示例和练习

示例 1:使用数组存储一组数字,并计算它们的平均值。

#include <iostream>int main() {int numbers[] = {10, 20, 30, 40, 50};int sum = 0;for (int i = 0; i < 5; i++) {sum += numbers[i];}double average = static_cast<double>(sum) / 5;std::cout << "Average: " << average << std::endl;return 0;
}

运行结果:
在这里插入图片描述

示例 2:使用字符串处理用户输入的姓名,并输出欢迎消息。

#include <iostream>
#include <string>int main() {std::string name;std::cout << "Enter your name: ";std::cin >> name;std::cout << "Welcome, " << name << "!" << std::endl;return 0;
}

运行结果:
在这里插入图片描述

练习题:

  1. 创建一个整数数组,存储一组学生的考试成绩,并计算平均分。

  2. 编写一个程序,要求用户输入一个句子,然后统计句子中的单词数。

  3. 使用C++字符串类,编写一个程序,将两个字符串拼接在一起,并输出结果。

  4. 创建一个字符数组,存储你喜欢的一句名言,并编写程序将其中的某个单词替换为其他单词。

问题 1:创建一个整数数组,存储一组学生的考试成绩,并计算平均分。

#include <iostream>int main() {const int numStudents = 5; // 假设有5名学生int scores[numStudents];int sum = 0;// 输入学生的成绩for (int i = 0; i < numStudents; i++) {std::cout << "输入第 " << i + 1 << " 名学生的成绩:";std::cin >> scores[i];sum += scores[i];}double average = static_cast<double>(sum) / numStudents;std::cout << "平均分:" << average << std::endl;return 0;
}

运行结果:在这里插入图片描述

问题 2:编写一个程序,要求用户输入一个句子,然后统计句子中的单词数。

#include <iostream>
#include <string>int main() {std::string sentence;int wordCount = 0;std::cout << "请输入一个句子:";std::getline(std::cin, sentence);// 通过空格切分句子并统计单词数for (char c : sentence) {if (c == ' ') {wordCount++;}}// 最后一个单词后没有空格,所以需要额外加一wordCount++;std::cout << "单词数:" << wordCount << std::endl;return 0;
}

运行结果:在这里插入图片描述

问题 3:使用C++字符串类,编写一个程序,将两个字符串拼接在一起,并输出结果。

#include <iostream>
#include <string>int main() {std::string str1 = "Hello, ";std::string str2 = "World!";std::string result = str1 + str2;std::cout << result << std::endl;return 0;
}

运行结果:在这里插入图片描述

问题 4:创建一个字符数组,存储你喜欢的一句名言,并编写程序将其中的某个单词替换为其他单词。

#include <iostream>
#include <cstring>int main() {char quote[] = "生活不止眼前的苟且,还有诗和远方。";const char* wordToReplace = "苟且";const char* replacement = "快乐";// 查找目标单词的位置char* found = std::strstr(quote, wordToReplace);if (found) {// 找到目标单词,进行替换int position = found - quote;std::strcpy(quote + position, replacement);}std::cout << quote << std::endl;return 0;
}

运行结果:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Django之十二:模板的继承+用户列表

模板的继承 新建layout.html&#xff1a; {% load static %} <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><link rel"stylesheet" href"{% static plugins…

C++list模拟实现

list模拟实现 1.链表结点2.类模板基本框架3.构造4.插入普通迭代器实现4.1尾插4.2普通迭代器实现4.3对比list和vector的iterator4.4迭代器的价值4.5insert4.6尾插头插复用写法 5.删除erase5.1erase5.2尾删头删复用写法 6.析构emptysizeclear6.1clear6.2size6.3 empty6.4 析构 7.…

问题: 视频颜色问题,偏绿

参考 什么是杜比视界&#xff1f; - https://www.youtube.com/watch?vldXDQ6VlC7g 【哈士亓说】07&#xff1a;HDR、杜比视界究竟是个啥&#xff1f;为什么这个视频还不是HDR视频&#xff1f; - https://www.youtube.com/watch?vrgb9Xg3cJns 正文 视频应该是 杜比视界 电…

GEO生信数据挖掘(二)下载基因芯片平台文件及注释

检索到目标数据集后&#xff0c;开始数据挖掘&#xff0c;本文以阿尔兹海默症数据集GSE1297为例 目录 下载平台文件 1.AnnotGPL参数改为TRUE,联网下载芯片平台的soft文件。&#xff08;国内网速奇慢经常中断&#xff09; 2.手工去GEO官网下载 转换芯片探针ID为gene name 拓…

保姆级Anaconda安装教程

一.anaconda下载 建议使用清华大学开源软件镜像站进行下载&#xff0c;使用官网下载速度比较慢。 anaconda清华大学开源软件镜像站 &#xff1a; https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 一路next即可&#xff0c;注意添加环境变量得选项都勾上。 二.验证…

【AI视野·今日Robot 机器人论文速览 第四十六期】Tue, 3 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Tue, 3 Oct 2023 Totally 76 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Generalized Animal Imitator: Agile Locomotion with Versatile Motion Prior Authors Ruihan Yang, Zhuoqun Chen, Jianhan M…

Java 随机数的获得方法(5种)

1. Math.random() 静态方法 产生的随机数是 0 - 1 之间的一个 double&#xff0c;即 0 < random < 1 代码&#xff1a; 结果&#xff1a; 当调用 Math.random() 方法时&#xff0c;自动创建了一个伪随机数生成器&#xff0c;实际上用的是 new java.util.Random()。当接…

【考研英语】2011 年英语(一)排序题思路复盘(费曼学习法)

文章目录 引言一、找语段特征词二、确定位置写在最后 引言 英语一中的新题型之一 —— 排序题&#xff0c;我是看的刘琦老师的方法课&#xff0c;她用的 2011 年的真题来讲解方法。讲完让我们回去用“费曼学习法”复盘以下&#xff0c;我个人感觉是一个不错的方法&#xff0c;…

mysql面试题10:MySQL中有哪几种锁?表级锁、行级锁、页面锁区别和联系?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Mysql中有哪几种锁? 在MySQL中,主要有以下几种类型的锁: 共享锁(Shared Lock):也称为读锁。多个事务可以同时持有共享锁,可以读取但不能修…

106.从中序与后序遍历序列构造二叉树

力扣题目链接(opens new window) 根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如&#xff0c;给出 中序遍历 inorder [9,3,15,20,7]后序遍历 postorder [9,15,7,20,3] 返回如下的二叉树&#xff1a; class Solution { public:Tr…

国产32位单片机 普冉PY32F002B 适用于LED灯驱,控制器等

PY32F002B 系列单片机采用高性能的 32 位 ARM Cortex-M0内核&#xff0c;宽电压工作范围的 MCU。嵌入了24Kbytes Flash 和 3Kbytes SRAM 存储器&#xff0c;最高工作频率 24MHz。有TSSOP20, QFN20, SOP16, SOP14,MSOP10多种不同封装类型多款产品。 芯片集成了I2C、SPI、USART 等…

新一代网络框架UringNet,基于最新的异步I/O

介绍 在去年的一篇文章中&#xff0c;笔者曾经提到了最新一代的网络I/O框架UringNet。具体内容可以参考Rings’ Power,性能“世界第一”的Web I/O框架。这是基于最新Linux内核的异步I/O组件io_uring开发的网络框架。由于采用了最新的异步框架&#xff0c;因此在同等硬件配置条件…

RabbitMQ的基本介绍

什么是MQ 本质是一个队列&#xff0c;只不过队列中存放的信息是message罢了&#xff0c;还是一种跨进程的通信机制&#xff0c;用于上下游传递信息。在互联网架构中&#xff0c;MQ是一种非常常见的上下游“逻辑解耦物理解耦”的消息通信服务。使用了MQ之后&#xff0c;信息发送…

【简单的留言墙】HTML+CSS+JavaScript

目标&#xff1a;做一个简单的留言墙 1.首先我们用HTML的一些标签&#xff0c;初步构造区域 样式。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>留言墙</title><style>/* ...... */ …

STM32HAL库CRC学习及测试记录

STM32HAL库CRC学习及测试记录 1.CRC的校验原理2.基本原理3.几个基本概念13.1.1 CRC检验码的计算13.1.2 错误检测13.2 STM32中的CRC 4.CRC功能描述5.STM32Cube生成工程6.看官方说如何使用这个驱动程序7.实验现象 1.CRC的校验原理 循环冗余校验(CRC)计算单元是根据固定的生成多项…

pycharm 中的一个非常好使用的智能提示tabnine(大大提高代码的书写效率)

一. pycharm 中的代码智能提示插件 有时候,我们总是在写代码的时候,敲全部的代码,太过于麻烦了,如果有一个软件可以预知你的后续的操作,提前将代码给你写出来,你只需要检查对错,就可以了,这样就大大提高了工作的效率. 上面的一个插件是汉化pycharm的软件包,也是非常好用的一款…

Kafka收发消息核心参数详解

文章目录 1、从基础的客户端说起1.1、消息发送者主流程1.2、消息消费者主流程 2、从客户端属性来梳理客户端工作机制2.1、消费者分组消费机制 1、从基础的客户端说起 Kafka提供了非常简单的客户端API。只需要引入一个Maven依赖即可&#xff1a; <dependency><groupId…

lv7 嵌入式开发-网络编程开发 02OSI七层结构

目录 1 计算机网络体系结构的形成 1.1 提出了不同体系结构 1.2 国际标准&#xff1a;开放系统互连参考模型 OSI/RM 1.3 存在两种国际标准 2 协议与划分层次 2.1 网络协议 2.2 协议的两种形式 2.3 层次式协议结构 2.4 各层完成的主要功能 2.5 计算机网络的体系结构 …

大规模语言模型--训练成本

目前&#xff0c;基于 Transformers 架构的大型语言模型 (LLM)&#xff0c;如 GPT、T5 和 BERT&#xff0c;已经在各种自然语言处理 (NLP) 任务中取得了 SOTA 结果。将预训练好的语言模型(LM) 在下游任务上进行微调已成为处理 NLP 任务的一种 范式。与使用开箱即用的预训练 LLM…

jenkins联动显示或隐藏参数

1. 添加组件 Active Choices Plug-in 如jenkins无法联网&#xff0c;可在以下两个地址中下载插件&#xff0c;然后放到/home/jenkins/.jenkins/plugin下面重启jenkins即可 Active Choices Active Choices | Jenkins plugin 2. 效果如下&#xff1a; sharding为空时&#xf…