数组 a[ ]
数组是由相同类型的一组变量组成的一个有序集合。数组中的每个变量称为一个元素,所有元素共用一个变量名,就是数组的名字。数组中每个元素的序号称为下标,下标从0开始。
数组类型指的是数组元素的数据类型,可以是任意类型,同一数组的所有元素类型相同。
一个数组在内存中占用一块连续的存储空间。数组定义后,长度不能改变。
二维数组 a[ ][ ]
二维数组就是具有两个下标的数组,确定一个元素需要两个下标值,第一个下标称为行下标,第二个下标称为列下标。
初始化二维数组时可以使用分行初始化或者顺序初始化。
#include <iostream>
using namespace std;
int main()
{
//分行初始化,每一行的初值用大括号括起来
cout << "分行初始化:" << endl;
int a1[3][4] = { {1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12} };
for (int i = 0; i < 3; i++) // 对行循环
{
for (int j = 0; j < 4; j++) // 对列循环
{
cout << a1[i][j] << '\t';
}
cout << endl;
}
//顺序初始化,将大括号内的值依次填入二维数组的各个元素中
cout << "顺序初始化:" << endl;
int a2[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
for (int i = 0; i < 3; i++) // 对行循环
{
for (int j = 0; j < 4; j++) // 对列循环
{
cout << a2[i][j] << '\t';
}
cout << endl;
}
}
字符串
C++ 中涉及的字符串有三种
string类型的字符串。
字符数组的字符串。
字符指针的字符串。
字符数组
字符数组字符串是有'\0'(字符串结束标志)的字符数组。
//定义长度为10的字符数组,初始化字符数组的默认值是空字符'\0'
char c[10] = {'C', ' ', 'P', 'r', 'a', 'g', 'r', 97, 'm', '!'};
//使用字符数组
for (int i = 0; i < 10; i++)
{
cout << c[i];
}
cout << endl;
// 字符数组的整体引用
cout << c << endl; // 整体引用时,如果字符数组中没有字符串结束标志'\0',会出现乱码。
c[9] = '\0';
cout << c << endl;
//使用字符串初始化字符数组
char c1[10] = "123456789";
cout << "sizeof(c1):" << sizeof(c1) << endl;
//没有指定字符数组长度时,字符数组长度时字符串长度+1,多出来的1个元素用于存放字符串结束标志。
char c2[] = "abcd";
cout << "sizeof(c2):" << sizeof(c2) << endl;
字符串结束标志:C++规定用ASCII码为0的特殊字符(空字符'\0')作为字符串结束标志。
字符串处理函数
strlen,获取字符串的长度
//string类型的字符串
string s = "abc";
cout << s << " s.length():" << s.length() << endl;
//字符数组的长度要大于字符串的长度
char c[20] = "Hello C++!";
//计算字符串的实际长度
int len = 0;
while ( c[len] != '\0') len++;
cout << "len: " << len << endl;
//使用strlen函数计算字符串的长度
cout << "strlen(c): " << strlen(c) << endl;
strcpy_s,拷贝字符串
char c1[4] = "c++";
char c2[] = "abcde"; //c2字符数组的长度是6
/*
strcpy_s(目标字符串,缓冲区大小,源字符串)
缓冲区大小要大于源字符串的长度;小于等于目标字符串的字符数组的长度。
*/
strcpy_s(c2, strlen(c1) + 1, c1);
cout << "c2: " << c2 << endl;
cout << "c2[4]: " << c2[4] << endl;
strcat_s,拼接字符串
char c1[20] = "C++ ";
char c2[20] = "program";
/*
strcat_s(目标字符串, 缓冲区大小, 源字符串);
缓冲区大小要 大于 (源字符串长度+目标字符串长度),
小于目标字符数组的长度
*/
strcat_s(c1, strlen(c1) + strlen(c2) + 1, c2);
cout << "c1: " << c1 << endl;
strcmp,比较字符串
char c1[20] = "C++";
char c2[10] = "C++";
/*
strcmp(字符串1,字符串2)
字符串1 等于 字符串2时, 返回0
字符串1 大于 字符串2时, 返回1
字符串1 小于 字符串2时, 返回-1
两个字符串的大小是由第一个不相等的字符的ASCII码决定的,ASCII码大字符大。
*/
cout << strcmp(c1, c2) << endl;
char c3[] = "C++a2";
char c4[] = "C++b1";
cout << strcmp(c4, c3) << endl; // 返回1
cout << strcmp(c3, c4) << endl; // 返回 -1
_strupr_s、_strlwr_s,转换大、小写
char c1[] = "Hello 123#!";
char c2[] = "Hello 123#!";
// 转换小写
_strlwr_s(c1);
cout << c1 << endl;
// 转换大写
_strupr_s(c2);
cout << c2 << endl;