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

2023-10-03 22:15

本文主要是介绍十四天学会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;
}

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

这篇关于十四天学会C++之第三天(数组和字符串)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/797

相关文章

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

python中字符串拼接的几种方法及优缺点对比详解

《python中字符串拼接的几种方法及优缺点对比详解》在Python中,字符串拼接是常见的操作,Python提供了多种方法来拼接字符串,每种方法有其优缺点和适用场景,以下是几种常见的字符串拼接方法,需... 目录1. 使用 + 运算符示例:优缺点:2. 使用&nbsjsp;join() 方法示例:优缺点:3

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

java字符串数字补齐位数详解

《java字符串数字补齐位数详解》:本文主要介绍java字符串数字补齐位数,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java字符串数字补齐位数一、使用String.format()方法二、Apache Commons Lang库方法三、Java 11+的St

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

C++字符串提取和分割的多种方法

《C++字符串提取和分割的多种方法》在C++编程中,字符串处理是一个常见的任务,尤其是在需要从字符串中提取特定数据时,本文将详细探讨如何使用C++标准库中的工具来提取和分割字符串,并分析不同方法的适用... 目录1. 字符串提取的基本方法1.1 使用 std::istringstream 和 >> 操作符示

C++原地删除有序数组重复项的N种方法

《C++原地删除有序数组重复项的N种方法》给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(... 目录一、问题二、问题分析三、算法实现四、问题变体:最多保留两次五、分析和代码实现5.1、问题分析5.