首页 > 编程语言 >十四天学会C++之第三天(数组和字符串)

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

时间:2023-10-04 17:31:47浏览次数:36  
标签:std 十四天 string int C++ 数组 字符串

十四天学会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;
}

运行结果:

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

示例 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;
}

运行结果:

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

练习题:

  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;
}

运行结果:

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

问题 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;
}

运行结果:

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

问题 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;
}

运行结果:

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

问题 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;
}

运行结果:

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

标签:std,十四天,string,int,C++,数组,字符串
From: https://blog.51cto.com/u_15747017/7705305

相关文章

  • C++ Thread 条件变量
    Condition_Variable介绍条件变量是利用线程间共享的全局变量进行同步的一种机制条件变量是为了控制多线程有顺序地访问共享资源,它和互斥量协同控制多线程有序,互斥地访问共享资源,重要解决的问题是生产者和消费者的问题variable_condition该类是专门结合unique_lock使用......
  • 探索Redis的字符串设计思想
    探索Redis的字符串设计思想作者:沈自在1引言​ 在Redis中的字符串和我们平时Java中所写的字符串是不一样的,在Java的设计中String是由final修饰的,因此也就成就了他不可变的特性。此外,在C语言的字符标准形式中是以NULL结尾的,但是要通过strlen函数去获取长度的复杂度却是O(n)的,......
  • VC++ MFC 编程--CMap的使用
    本文翻译自: CMapHow-to-CodeProject介绍像我这样的程序员,在CMap之前学习了STL::map,总是认为CMap很难使用,并且总是尝试以STL::map的方式使用CMap。在本文中,我将解释CMap,以及如何将它用于您自己的自定义类。在本文的最后,我将展示一个如何正确使用CMap与CString*的例子(注意,我......
  • C/C++学习 -- 分组加密算法(DES算法)
    数据加密标准(DataEncryptionStandard,DES)是一种对称密钥加密算法,是信息安全领域的经典之作。本文将深入探讨DES算法的概述、特点、原理,以及提供C语言和C++语言实现DES算法的代码案例。一、DES算法概述DES算法是一种对称密钥加密算法,由IBM于1977年开发并于1977年被美国国家标准局(NI......
  • QFluentWidgets: 基于 C++ Qt 的 Fluent Design 组件库
    简介QFluentWidgets是一个基于Qt的FluentDesigner组件库,内置超过150个开箱即用的FluentDesigner组件,支持亮暗主题无缝切换和自定义主题色。搭配所见即所得的FluentDesigner软件,只需拖拖拽拽,不用编写一行QSS,就能快速搭建现代化软件界面。官网地址:https://qfluentw......
  • C++ bitset 用法和应用
    C++的bitset在bitset头文件中,它是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1bit空间。下面是具体用法构造函数bitset常用构造函数有四种,如下bitset<4>bitset1;//无参构造,长度为4,默认每一位为0bitset<8>bitset2(12);//长度为8,二进制保存,前......
  • C++ typedef用法详解
    typedef的语法描述 在现实生活中,信息的概念可能是长度,数量和面积等。在C语言中,信息被抽象为int、float和double等基本数据类型。从基本数据类型名称上,不能够看出其所代表的物理属性,并且int、float和double为系统关键字,不可以修改。为了解决用户自定义数据类型名称的需求,C语言......
  • C++ 初始化列表
    何谓初始化列表与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。在C++中,struct和class的唯一区别是默认的访问性不同,而这里我们不考虑访问性的问题,所以下面的代码都以struct来演示。structfoo......
  • C++ thread 互斥操作
    ThreadMutexstd::mutex是C++11最基本的互斥量,该类的实例化对象提供了资源独占所有权的特性,用于保护共享数据免受多个线程同时访问的同步原语。Mutex用法头文件#include<mutex>类型std::mutex最基础的Mutex类std::recursive_mutex递归的Mutex类std......
  • 库函数之字符函数与字符串函数(上)
    前言......