C++ 入门04:数组与字符串

从‘静态拍照’到‘动态录像’:用Malmquist指数讲好你的效率变化故事(附Stata/R代码) 本文深入探讨了如何利用Malmquist指数构建动态效率分析框架,从静态数据到动态叙事的转变。通过分解技术效率变化(EC)和技术进步(TC),结合Stata/R代码实现四种动态可视化方法,帮助研究者更直观地展示效率变化的动态特征。文章还提供了诊断性叙事结构和比较叙事技巧,助力决策者理解效率提升的来源与趋势。 阅读详情

往期回顾:

C++ 入门01:初识 C++-优快云博客
C++ 入门02:控制结构和循环-优快云博客
C++ 入门03:函数与作用域-优快云博客


一、前言

在前面文章的学习中,我们大概了解了C++基础,包括C++的基本结构、变量的概念、输入输出操作、控制结构、函数与作用域等。

今天,我们将在此基础上进一步学习数组与字符串这两大核心数据结构。数组作为一组具有相同类型的变量的集合,是处理一组数据(如学生成绩、商品信息等)时不可或缺的工具。通过数组,我们可以更加便捷地对多个相关数据进行操作和管理。

而字符串则是文本处理的基石。在C++中,字符串可以通过字符数组或标准库中的string类来表示。我们将学习如何创建和修改字符串,如何进行字符串的连接、比较和查找等操作,以及如何利用字符串处理函数来实现复杂的文本处理任务。这些技能对于开发需要处理用户输入、输出日志、进行文本分析等功能的程序至关重要。

二、数组与字符串

 2.1、 数组

数组是一种基本而强大的数据结构,在包括C++在内的多种编程语言中都扮演着核心角色。数组用于在内存中连续存储一组相同类型的数据元素。这种连续存储的特性使得数组在访问元素时非常高效,因为可以通过简单的数学计算(通常是索引乘以元素大小)来直接定位到任何元素的内存地址。

(1)数组特性

相同类型:

数组中的所有元素都是同一类型,这保证了内存的一致性和操作的简便性。
连续存储:数组元素在内存中是连续存放的,这使得通过索引快速访问数组中的任意元素成为可能。索引通常是从0开始的。
固定大小:在大多数编程语言中,数组的大小在创建时就被确定,并且在整个生命周期中保持不变(尽管有些语言提供了动态数组或向量等结构来模拟可变大小的数组)。
随机访问:由于数组在内存中是连续存储的,因此可以通过索引直接访问数组中的任何元素,这种访问方式被称为随机访问。

(2)数组声明与初始化

数组的声明是一个明确的过程,它要求程序员指定数组将要存储的数据类型以及数组能够容纳的元素数量(即数组的大小)。这种明确性有助于编译器为数组分配适当的内存空间,并确保对数组的操作是类型安全的。

语法:

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

数据类型:

指定了数组中每个元素的数据类型。这决定了数组可以存储什么类型的数据,比如int、float、char等。
数组名:是程序员为数组指定的唯一标识符,用于在程序中引用数组。
数组大小:是一个整数常量表达式,指定了数组中元素的数量。这个大小在数组声明时确定,并且在数组的整个生命周期内保持不变。

初始化:

在C++中,数组可以在声明的同时进行初始化。初始化是设置数组元素初始值的过程。当数组被初始化时,编译器会自动为数组的每个元素分配初始值,这些值可以是程序员指定的,也可以是编译器默认提供的(对于未明确初始化的元素)。

示例:

#include <iostream>  
using namespace std;  
  
int main() {  
    // 声明并初始化一个整型数组  
    int numbers[5] = {1, 2, 3, 4, 5};  
  
    // 访问并打印数组中的元素  
    for(int i = 0; i < 5; i++) {  
        cout << numbers[i] << " ";  
    }  
  
    // 声明并部分初始化一个字符数组,未初始化的元素将被自动初始化为'\0'(在某些情况下)  
    char letters[10] = {'a', 'b', 'c'}; // 注意:这里只初始化了前三个元素  
  
    // 访问并打印字符数组中的元素(仅打印已初始化的部分)  
    for(int i = 0; i < 3; i++) { // 注意:这里只循环到3,因为只初始化了三个元素  
        cout << letters[i] << " ";  
    }  
  
    return 0;  
}

在上面的例子中,numbers数组是一个整型数组,它被声明为包含5个元素,并在声明时通过花括号内的列表初始化为1到5。letters数组是一个字符数组,它被声明为包含10个元素,但只显式地初始化了前三个元素为'a'、'b'和'c'。

对于letters数组中未显式初始化的元素,它们的值将是未定义的(但在某些情况下,如作为字符串使用时,数组的第一个未初始化元素之后的元素可能会被自动初始化为'\0'字符,以标记字符串的结束)。然而,这种自动初始化为'\0'的行为并不是所有情况下都会发生的,特别是在非字符串上下文中。因此,最好总是显式地初始化数组的所有元素,以避免潜在的未定义行为。 

(3)访问数组元素 

 数组元素通过索引访问,索引从 0 开始。

 示例:

#include <iostream>

int main() {
    int scores[5] = {90, 85, 80, 75, 70};

    for (int i = 0; i < 5; i++) {
        std::cout << "Score " << i + 1 << ": " << scores[i] << std::endl;
    }

    return 0;
}

(4)修改数组元素

可以通过索引修改数组元素的值。

示例:

#include <iostream>

int main() {
    int scores[5] = {90, 85, 80, 75, 70};
    scores[2] = 95; // 修改第三个元素的值

    std::cout << "Updated third score: " << scores[2] << std::endl;

    return 0;
}

 (5)多维数组

多维数组是数组的数组,最常见的是二维数组。

语法:

type arrayName[size1][size2];
type arrayName[size1][size2] = {{value11, value12, ...}, {value21, value22, ...}, ...};

示例:

#include <iostream>

int main() {
    int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};

    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            std::cout << matrix[i][j] << " ";
        }
        std::cout << std::endl;
    }

    return 0;
}

 2.2、 字符串

字符串在C++中是由一系列字符组成的序列,这些字符可以是字母、数字、标点符号等。C++提供了多种方式来处理字符串,其中最常见的是使用字符数组(C风格字符串)和std::string类(C++标准库中的字符串类)。

(1)字符数组(C风格字符串)

字符数组是C++中处理字符串的传统方式,它实际上是一个字符类型的数组,以空字符('\0')作为字符串的结束标志。这种字符串通常被称为C风格字符串。

A、声明和初始化:

char str[] = "Hello, World!"; // 字符数组,包含13个字符加上一个空字符'\0'作为结束

注意事项:

  • C风格字符串必须以空字符结束。
  • 访问字符串时需要注意不要越界。
  • 字符串的长度(不包括结束符)可以使用标准库函数strlen来获取。
  • 字符串的复制、连接等操作需要手动管理内存,容易出错。

(2)std::string

为了简化字符串的处理,C++标准库提供了std::string类。std::string是一个模板类,专门用于处理字符串,它提供了丰富的成员函数来执行各种字符串操作。

声明和初始化:

#include <string>  
  
std::string str = "Hello, World!"; // 使用std::string类声明并初始化字符串

 优点:

  • 自动管理内存,无需担心内存泄漏或越界问题。
  • 提供了丰富的成员函数,如length()、size()(两者等价,返回字符串长度,不包括结束符)、append()、substr()等,方便进行字符串操作。
  • 支持字符串与C风格字符串之间的转换(通过c_str()成员函数可以将std::string转换为C风格字符串)。

示例:

#include <iostream>  
#include <string>  
  
int main() {  
    std::string str = "Hello, ";  
    str += "World!"; // 使用+=操作符连接字符串  
  
    std::cout << str << std::endl; // 输出: Hello, World!  
  
    std::cout << "Length: " << str.length() << std::endl; // 输出字符串长度  
  
    return 0;  
}

在现代C++编程中,推荐使用std::string来处理字符串,因为它更加安全、方便和灵活。然而,在某些需要与C语言代码互操作或优化内存使用的场景下,仍然需要使用字符数组(C风格字符串)。

(3)常用字符串操作

A、获取字符串长度

std::string 提供 length() 和 size() 方法来获取字符串长度。

示例:

#include <iostream>
#include <string>

int main() {
    std::string greeting = "Hello, World!";
    std::cout << "Length of greeting: " << greeting.length() << std::endl;
    return 0;
}
B、连接字符串

可以使用 + 运算符或 append() 方法来连接字符串。

示例:

#include <iostream>
#include <string>

int main() {
    std::string firstName = "John";
    std::string lastName = "Doe";
    std::string fullName = firstName + " " + lastName;
    std::cout << "Full name: " << fullName << std::endl;
    return 0;
}
 C、访问字符串字符

 可以使用索引访问和修改字符串中的字符。

示例:

#include <iostream>
#include <string>

int main() {
    std::string greeting = "Hello";
    std::cout << "First character: " << greeting[0] << std::endl;

    greeting[0] = 'J';
    std::cout << "Modified greeting: " << greeting << std::endl;

    return 0;
}

以上就是 C++ 程序的数组与字符串的基本用法的知识点了。数组帮助我们存储和管理一组数据,而字符串是处理文本的重要工具。掌握这些内容可以大大提高我们处理数据的能力。

都看到这里了,点个赞再走呗朋友~

加油吧,预祝大家变得更强!

分享一个N-MOS管和P-MOS管驱动应用实例 大家好,我是『芯知识学堂』的SingleYork,今天给大家分享一下MOS管驱动相关的知识。 MOS管在电路设计中是比较常见的,按照驱动方式来分的话,有两种,即:N-MOS管和P-MOS管。MOS管跟三极管的驱动方式有点类似,但又不完全相同,那么今天笔者将会给大家简单介绍一下N-MOS管和P-MOS管的工作原理,并结合自己实际的应用来给大家分享一下如何来驱动N-MOS管和P-MOS管。 首先,我们先来看一下N-MOS管和P-MOS管分别在电路中的电气符号: 咋一看上面两个电气符号,似乎非常的相似,可能让很 阅读详情

相关推荐

基于GEC6818开发板的C/C++贪吃蛇小游戏

f.开始游戏(进入游戏,并没有马上开游戏,需要点击播放才能开始)2.相关宏,全局变量(可以根据自己需要进行修改)k.显示文字前的相关初始化。k.自定义font.h文件。1.需要的主要头文件。l.在开发板上显示字1。m.在开发板上显示字2。a.显示固定大小图片。h.线程1:获得坐标。

2301_77273301的博客 2132

【c++】用string类定义字符串数组

#include #include using namespace std; 用字符数组来存放字符串并不是最理想和最安全的方法。 C++提供了一种新的数据类型——字符串类型(string类型),在使用方法上,它和char、int类型一样,可以用来定义变量,这就是字符串变量——用一个名字代表一个字符序列。 实际上,string并不是C++语言本身具有的基本类型

Oliver King 的小窝 7万+

YOLO26 数据标注工具:LabelImg、Label Studio实战指南:主流标注工具的安装配置与使用技巧,高效完成目标检测数据标注

本文介绍了目标检测中数据标注的核心地位与常用工具。数据标注质量直接影响模型性能,需要关注准确性、一致性等维度。文章详细讲解了边界框、类别标签等基本概念,并对比了LabelImg、Label Studio等主流标注工具的特点。重点介绍了LabelImg的轻量级、易用性等优势,以及Label Studio的协作功能,为不同规模项目提供标注工具选择建议。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1177

C++入门——数组1

重生之你是C++大佬,这点小题简直易如反掌。

2401_86644481的博客 2569

深度揭秘!用 DeepSeek 打造超智能电商客服系统全流程

摘要:本文围绕使用 DeepSeek 开发电商智能客服展开详细教程。先介绍前期准备,包括了解 DeepSeek、获取 API 权限与搭建开发环境。接着阐述数据收集预处理,结合电商业务逻辑实现商品与订单信息查询。还提及优化性能的方法,如模型微调、多轮对话管理和错误处理。然后说明了基于 Web 和云平台的部署方案。最后强调持续监控和改进的重要性,通过设置监控指标、收集分析用户反馈来优化系统,助力开发者打造高效电商智能客服。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 7815

YOLOv11改进策略【卷积层】| SPD-Conv 针对小目标和低分辨率图像的检测任务

SPD-Conv是一种新的 CNN 构建模块,用于替代传统 CNN 架构中使用的步长卷积(strided convolution)和池化(pooling)层,它由空间到深度(Space-to-depth,SPD)层和非步长卷积(non - strided convolution)层组成。

Limiiiing的博客 4976

【C++】黑马程序员《C++从入门到精通》

黑马程序员《C++从入门到精通》--学习笔记第八部分:bug与思考01、iostream和iostream.h和stdio.h的区别02、#define和const的区别03、using names std 什么意思?04、数据类型的意义?第一部分:基础入门知识(1-71)01、课程安排02、C++书写helloworld03、程序的注释04、变量05、常量06、关键字07、标识符命名规则08、数据类型第二部分:通讯录管理系统(01-12)0102第三部分:C++进阶知识(01-64)0102第四部分:职工

浪里小飞侠的博客 2万+

【深度学习|地学应用】MODIS AOD产品和HYSPLIT模型的局限性和不确定性?

【深度学习|地学应用】MODIS AOD产品和HYSPLIT模型的局限性和不确定性?

985小水博的摸鱼日常 463

C++入门基础知识(1)(字符串,字符数组,string)

字符串,字符数组,string的操作,常用函数

2402_83577836的博客 4445

YOLOv8交通监控全方案:精准车辆计数+违章(闯红灯/压线)识别,拿来就落地!

作为深耕计算机视觉落地的开发者,我见过太多交通监控的“伪智能”——传统系统要么车辆计数不准(漏计/重复计数),要么违章识别滞后(靠人工回看录像),甚至连“闯红灯、压线”这类常见违章都无法实时判定,完全满足不了实际交通管理需求。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 646

【硬件的单元测试 UT 3】PCIe 3.0及信号完整性测试方法

PCIe标准自从推出以来,1代和2代标准已经在PC和Server上逐渐普及,用于满足高速显卡、高速存储设备对于高速数据传输的要求。出于支持更高总线数据吞吐率的目的,PCI-SIG组织在2010年制定了PCIe 3.0,即PCIe 3代的规范,数据速率达到8Gbps。

qq_43416206的博客 1415

C++入门——数组2

重生之你是C++大佬,这点小题简直易如反掌。

2401_86644481的博客 1284

RK3588网卡出现丢包或者带宽不足的问题验证排查

注意除了有最大的TCP数据接收缓冲,还有/proc/sys/net/core/wmem_max — 最大的TCP数据发送缓冲可以调整,这里暂时没用到,针对具体需要可适当调整。比如把ethx接口中断从默认的cpu0迁移到其它cpu,例如将eth0中断234移到cpu7 (10是16进制, cpu0 =3588的cpu有8个核,4个A55(小核)+4个A76(大核),可以找到对应中断 将中断从默认cpu0核切到cpu7。tcp_rmem:单位是字节,接收缓存区大小,缓存从对端接收的数据,后续会被应用程序读取。

Android/Linux驱动开发传帮带学习,让驱动入门门槛更低! 2030

c++ 数组截取_C语言零基础入门—数组-04

c语言零基础入门—数组-04 本节课的任务是:讲解字符数组与字符串字符串的常用方法。01 - 字符数组我们之前讲解的一维数组与二维数组 都是基于存储的内容是int类型的数据。我们说过 同一个数组中可以存放任意简单类型的数据,比如:一个数组中可以存放的数据类型都是:int,float,double,char等等。今天我们着重讲解一下char类型的数组。char类型的数组就被称之为字符数组,因为他的每...

weixin_36368404的博客 1986

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

c++数组

char 数组名【常量表达式】

2303_79224349的博客 1903

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

cpp学习笔记(关于数组+字符串和字符数组)

1.cpp中的数组和java中不大一样,首先cpp中的数组不是对象,无法调用length方法,只能通过计算来得到数组的长度. 一维数组; 而且要么在定义的时候确定数组的长度. 要么在后面初始化的时候确定数组长度; 反正是不能和java一样写个空数组放在那里,,,,,,,,, 一维数组定义的时候,如果没有确定元素,就一定要确定长度 如果确定了元素(初始化完成)但是没有给出长度,那么cpp就可以自己猜出长度来 int arrrr[] = { 12345 }; 很顺滑地知道长度是1了 数组在定..

weixin_62697030的博客 1604

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C/C++语言基础--字符串(包括字符串与字符数组、字符串与指针、字符串处理函数等),代码均可运行

编译器不会给字符数组自动添加’\0’编译器会自动给双引号的字符串字面值加上’\0’指针指向的字符串是常量,是没法修改的。

羊小猪~~的博客 1677

C++ | 数组(一维数组、二维数组)、字符数组、字符串

01 一维数组 数组,就是把相同数据类型的变量组合在一起而产生的数据集合。 数据就是从某个地址开始连续若干个位置形成的元素集合。 数据类型 数组名[数组大小]; 数组大小必须是整数常量,不可以是变量。 一维数组的初始化 需要给出用逗号隔开的从第一个元素开始的若干个元素的初值,并用大括号括住,后面未被赋初值的元素一般情况默认初值为0。 如果数组一开始没有赋初值,数组中的每个元素都可能会是一个...

大虎牙的博客 2618

C++——04数组指针字符串

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、数组1.排序二、指针1.函数指针2.lamda表达式三、动态分配内存1.malloc与new区别2.delete与free区别四、动态分配内存1.深复制与浅复制 一、数组 在c++标准库中对数组进行封装,得到了一个类vetcor,实现了数组存储数据的单一性、连续性、有序性的。 为了实现连续性,会将之前的申请的空间释放继续申请足够大的空间用于存放数据。 vector在作为函数形参时,可以不用传递数组的长度,可以通过调用函数来实现

mindDJX的博客 258

00[VC++].04数组字符串指针.md

文章目录第四章 数组字符串指针基于范围的for 循环字符数组获取数组中元素个数字符串输入多维数组指针指针声明指针初始化指向`char`类型的指针与字符数组区别指针数组 常量指针 指向常量的指针sizeof操作符指针和数组统计字符串字符个数指针和多维数组动态内存分配为数组动态分配内存多维数组动态分配使用引用基于范围for循环中使用引用字符串的库函数 第四章 数组字符串指针 基于范围的for 循环 int a[]={1, 14, 4 ,4 ,78}; for(auto i:a) { } 字符数组 字符串数

迷之狗蛋的博客 1615

C++数组、指针与字符串(一)

C++数组、指针与字符串 1.数组的定义与使用 数组是具有一定顺序关系的若干相同类型变量的集合体,组成数组的变量称为该数组的元素。 数组的定义 类型说明符 数组名[常量表达式] [常量表达式]…; 数组名的构成方法与一般变量名相同。 例如:int a[10]; 表示a为整型数组,有10个元素:a[0]…a[9] 例如:int a[5] [3] 表示a为整型二维数组,其中第一维有5个下标(04...

weixin_45846235的博客 369

「C++系列」字符串

在C++中,字符串是一种用于存储和操作文本数据的类型。C++标准库提供了几种处理字符串的方式,但最常用的是类,它定义在头文件中。提供了丰富的成员函数来执行各种字符串操作,比如插入、删除、查找、替换、连接字符串等。

日常笔记/总结/系列知识梳理 1449

c++ string 数组_C++ C风格字符串(学习笔记:第6章 22)

在C++的基础数据类型中,没有字符串常量。C++有两种方式来存储和处理字符串,一种是从C语言继承过来的C风格字符串,即用字符数组来存放字符串。另一种是C++标准模板库里面的string类(推荐使用string类)。字符串常量[1]例:"program"各字符连续、顺序存放,每个字符占一个字节,以‘0’结尾,相当于一个隐含创建的字符常量数组“program”出现在表达式中,表示这一char数组的首地...

weixin_39823676的博客 76

0x04_数组_指针_字符串

C++郑莉第六章+自己的理解 整理

qq_51550750的博客 1373

P23 C++字符串

字符串是一个接一个字符的一组字符。字符可以是字母、数字、符号,这类东西基本上就是文本,这些对我们来说很常见,作为人类,我们想要在电脑上以某种方式来表示文本。当然文本可以是一个单个的字符,也可以是一整个段落,可以是一个单词,也可以是一堆单词,所有这些被称为字符串的东西都是一个文本字符串。所以我们会有这样的问题,当我们编程的时候,需要一些方法能够在我们的程序中将文本表现出来,这就要用到 C++ 字符串。对于我们来说,这是一种能够表示和处理文本的方法。

weixin_73901182的博客 992

两种字符串有什么区别——字符数组和字符串,初步认识STL

在C语言和C++中,我们可以使用""指明一个字符串。既然有存储字符的变量,那有没有存储字符串的变量呢?当然有。我们可以使用C语言风格的字符数组完成这一个功能。char str[字符串大小];跟整形数组一样,我们可以给字符数组赋一个初值。等同于每个字符串后面都应当有一个终止符\0,它的ASCII码值是0。所以定义字符数组时也应该开大一点。终止符在赋初值时会自动加上。跟整形数组不同的是,字符数组可以直接输入和输出。cin>>str;cout

Pantheraonca的博客 1197
上一篇: C++ 入门03:函数与作用域
下一篇: C++ 入门05:类和对象
从一的
博客等级 码龄5年 1995粉丝 213原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值