C++(五)复合类型(数组、字符数组、字符串)

是爱养活了心脏 6天前   阅读数 9 0

一、数组

通俗的说数组就是同类型的一群数据,定义一个数组,就是定义一群数据。例如,学生成绩管理系统中,你不可能来一个定义一个学生的姓名、学生的学号,学生的成绩。这样既费事,还要为每个变量命名。
所以在C语言中提出了数组这个东西。之前说过定义一个数组,就是定义一群数据。所以大概的定义如下:
int stu_num[50];
这样一定义之后,就一下子定义了50个int类型的变量,他们统一放在一个数组里面。

定义数组
数组的基本定义格式如下:
类型名 数组名[常量表达式];

注意,[ ]内部的常量表达式用以表示数组中元素的个数,这个必须是个常量或常量表达式,不能是个变量或者一个不确定的值,不然编译阶段就直接报错了。因为定义好了之后,系统马上就根据这个个数来分配空间了。如果是个变量,系统就不知道要分配多少空间。

数组名字的命名规则跟变量是一样的,只能使用数字、字母、下划线,而且数字不能做开头。

访问数组中的元素:
数组必须先定义之后再使用,需要通过下标来访问,具体的访问格式如下:
数组名[元素下标];
这个元素的下标是从0开始的,例如:int stu_num[60]; 那么下标就是 0~59。
备注:这个下标可以是常量也可以是变量,但必须在规定的范围内访问,不然会出现访问越界,导致程序崩溃的重大低级问题。

一维数组的初始化:
①、在定义数组的时候就对数组的全部元素初始化:
int stu_num[5] = {101, 102, 103, 104, 105};

②、在定义数组的时候对部分元素进行初始化:
int stu_num[5] = {101, 102};
后面未初始化的默认赋初值0
其实就是:stu_num[0]=101, stu_num[1]=102, stu_num[2]= stu_num[3]= stu_num[4]=0

③、在定义数组的时候就对数组的全部元素初始化,可以不指定数组长度:
int stu_num[] = {101, 102, 103, 104, 105};

不管是定义的时候指定长度还是不指定长度,总结起来就一个规则,定义的时候让系统知道数组的长度就可以了,也就是定义即确定大小。

二、字符数组

字符数组就是数组中存放的是字符,即 char 类型。例如:char stu_name[50];
因为字符串本身就是有一个一个的字符组合而成的,所以,字符数组可以理解为是一个字符串。在以后的C++编程过程中会遇到各种各样对字符串的操作。

字符数组的初始化
方式①:定义时初始化
char stu_name[3] = {‘x’, ‘y’, ‘z’};
或者 char stu_name[] = {‘x’, ‘y’, ‘z’};  // 自动初始化长度,让编译器去数(与数组一样)
或者 char stu_name[] = “xyz”;     // 自动初始化长度,让编译器去数(与数组一样)
或者 char stu_name[3] = “xyz” ;

方式②:定义之后分别对每个字符初始化;
stu_name[0] = ‘x’;
stu_name[1] = ‘y’;
stu_name[2] = ‘z’;

字符数组的输入与输出

//输入
char stu_name[10];
cin >> stu_name;
cout << stu_name<< endl;

//输出
char stu_name[10] = {'a', 'b', 'c', 'd', 'e', '\0', ' ', 'x', 'y', 'z'};
cout << stu_name<< endl;

C语言标准库常用的字符操作函数

函数 目的
strcpy(s1, s2); 复制字符串 s2 到字符串 s1。
strcat(s1, s2); 连接字符串 s2 到字符串 s1 的末尾。
strlen(s1); 返回字符串 s1 的长度。
strcmp(s1, s2); 如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回值小于 0;如果 s1>s2 则返回值大于 0。
strchr(s1, ch); 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
strstr(s1, s2); 返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。
#include <iostream>
#include <cstring>
 
using namespace std;
 
int main ()
{
   char str1[11] = "Hello";
   char str2[11] = "World";
   char str3[11];
   int  len ;
 
   // 复制 str1 到 str3
   strcpy( str3, str1);
   cout << "strcpy( str3, str1) : " << str3 << endl;
 
   // 连接 str1 和 str2
   strcat( str1, str2);
   cout << "strcat( str1, str2): " << str1 << endl;
 
   // 连接后,str1 的总长度
   len = strlen(str1);
   cout << "strlen(str1) : " << len << endl;
 
   return 0;
}

字符数组与字符串的区别
区别就是字符串比字符数组多了一个结束标志的字符:’\0’,这个字符的ASCII码就是0。
字符串的有效字符就是结束标志\0之前的字符。字符串所占用的字节数包含字符串结束标志\0

三、字符串

C++ 标准库提供了 string 类类型,支持上述C语言标准库常用的字符操作函数,还提供如下方便的操作:

#include <iostream>
#include <string>
 
using namespace std;
 
int main ()
{
   string str1 = "Hello";
   string str2 = "World";
   string str3;
   int  len ;
 
   // 复制 str1 到 str3
   str3 = str1;
   cout << "str3 : " << str3 << endl;
 
   // 连接 str1 和 str2
   str3 = str1 + str2;
   cout << "str1 + str2 : " << str3 << endl;
 
   // 连接后,str3 的总长度
   len = str3.size();
   cout << "str3.size() : " << len << endl;
 
   return 0;
}
发布了386 篇原创文章 · 获赞 592 · 访问量 72万+

注意:本文归作者所有,未经作者允许,不得转载

全部评论: 0

    我有话说: