欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

复合数据类型

程序员文章站 2022-07-16 19:35:44
...

复合数据类型

数据类型

复合数据类型

结构体

定义

C++ 中的结构体是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构。
声明格式
struct 类型名{
数据类型1 成员名1;
数据类型2 成员名2;

}(变量名);

作用

可以把不同类型、不同含义的数据当作一个整体来处理。

特点

(1)可以对结构体变量的整体进行操作。
(2)可以对结构体变量的成员进行操作。
引用结构体变量中成员的格式为:
结构体变量名. 成员名
(3)结构体变量的初始化方法与数组类似。

运算符重载

解决结构体或自定义数据类型的加法、减法等特殊含义的运算。
一般格式
类型名 operator 运算符 (const 类型名 变量)const{

}

成员函数

在 C++ 中,允许在结构中定义函数,该函数称为“成员函数”。
一般格式
struct 结构名 {
数据成员
成员函数
};

枚举

1.枚举类型定义了一组命名的整数常量,以提高代码的可读性。
2.可以指定枚举成员的值(编译器会给未指定值的枚举成员赋予相邻值的下一整数值)
3.枚举类型在必要时,如参与算术运算时,会被自动提升为算术类型(能表示枚举成员值的范围)
4.枚举的成员名字是不可打印的,输出的是它所表示的整数值

标准库类型string

1.string 表示可变长度的字符序列
字符串是对象
2.string 类支持字符串对象的各种操作
(1)各种初始化方式
(2)字符串之间的复制、比较、连接
(3)查询字符串长度和判断字符串是否为空
(4)访问字符串中的单个字符

3.使用string 类要包含头文件

定义和初始化string对象

1.//默认初始化:
string s1; //s1是一个空串,没有任何内容
2.//拷贝初始化:把=右边的初始值复制到左边新创建的对象中
string s2 = s1; // s2是s1的副本
string s3 = “hello”; //s3是这个字符串字面值的副本
3.//直接初始化:初始值可以有一个或多个
string s4(“welcome”); //s4是这个字符串字面值的副本
string s5(5, ‘a’); //s5的内容是aaaaa

读写string对象

1.使用标准库中iostream可以读写string对象

//读写string 对象
#include<iostream>	
#include<string>	
using namespace std;
int main(){
	string s;
	cin >> s;
	cout << s << endl;
	return 0;
}

2.可以用循环读取未知数量的string对象
输入操作符返回输入流对象,如果输入流对象处于有效状态,表示没有遇到文件结束或非法输入

//读取输入流中的单词,直到文件结束
string word;
while(cin >> word)
  cout << word << endl;	
	

3.getline()函数(有限制)
(1)两个参数:输入流对象和存放读入字符串的string对象。
(2)从指定输入流中读取内容,遇到换行符为止;将所读内容存入指定的string对象中,流中的换行符被读取并丢弃。
(3)返回参数输入流对象.

//每次读取一行文本,直到文件结束
string line;
while(getline(cin, line))
  cout << line << endl;	

判断是否为空

empty()函数判断string对象是否为空,返回一个布尔值
格式:stringObj.empty()

获取对象长度

size()函数返回string对象的长度,即对象中字符的个数

//每次读取一行文本,输出长度超过80个字符的行
string line;
while(getline(cin, line))			
  if(line.size() > 80)
  //字符串长度的类型
string line = "hello";
string::size_type len1 = line.size();	
auto len2 = line.size();
decltype(line.size()) len3 = 0;

比较string对象

可以用关系运算符比较两个字符串对象:
(1)两个string相等意味着它们的长度相同,并且所包含的字符也完全相同
(2)字符串的大小关系依照字典顺序定义且区分大小写字母

string s1 = "hello";		
string s2 = "hello world";	// s2 > s1
string s3 = "Hello";		// s3 < s1, s3 < s2

string对象的赋值和连接

1.允许把一个string对象的值赋给另一个string对象
2.为string对象赋一个字符串字面值常量

string s1 = "hello", s2;
s2 = s1;
s1 = "C++ Programming Language";

string对象和C风格字符串

1.字符串字面值不是string类型,而是const char类型
2.string对象和C风格字符串的转换
可以将C风格的字符串直接赋给string对象,反之不可
3.用string对象的c_str()操作可以返回一个表示该string对象内容的C风格字符串,结果为const char
类型,即C风格字符串的首地址

string s1 = "If you really want it.";
int x = strlen(s1);			//Error
x = strlen(s1.c_str());			//OK

注意!!!!