C++的数据复合类型

1.数组

数组(array)是一种数据格式,能够存储多个同类型的值,数组可以存储60个int类型的值、12个short值或365个float值。每个值都存储在一个独立的数组元素中。
数组声明应指出以下三点:
1.存储在每个元素中的值得类型
2.数组名
3.数组中的元素数

初始化数组的规则:
1.只有在定义数组时才能使用初始化
2.不能将一个数组赋给另一个数组
3.提供的数值可以少于数组的元素数目,未赋值的元素为0
4.如果初始化数组方括号【】为空,编译器将计算元素个数
5.初始化数组时可省略等号
6.列表初始化禁止缩窄转换
例:
int cards[4] = {3,6,8,10}
char hand[4] {‘h’,‘e’,‘l’,‘l’}
long plifs[] = {25,92,3}

2.字符串

char boss[8] = “Bozo”;
空值字符自动加到结尾,其余元素设置为\0,"Bozo"实际上表示的是字符串所在的地址,所以不能用char
下面用一个程序在数组中使用字符串:

//storing strings in an array 储存一个字符串在数组里
#include<iostream>
#include<cstring>   //调用strlen()函数
int main()
{
   
    using namespace std;
    const int Size = 15;
    char name1[Size];
    char name2[Size] = "C++owboy";
    cout<<"Howdy! I'm "<<name2;
    cout<<"!What's your name?\n";
    cin>>name1;
    cout<<"Well,"<<name1<<",your name has ";
    cout<<strlen(name1)<<" letters and is stroed\n";//strlen()返回存储在数组中的字符串长度,不算空字符
    cout<<"in an array of "<<sizeof(name1)<<" bytes.\n";//sizeof()返回整个数组的长度
    cout<<"Your initial is "<<name1[0]<<".\n";
    name2[3] = '\0';                                //设置空字符
    cout<<"Here are the frist 3 characters of my name:";
    cout<<name2<<endl;                              //输出到空字符结束
    system("pause");
    return 0;
}

字符串输入:
cin使用空白(空格、制表符和换行符)来确定字符串的结束位置,这意味着cin在获取字符数组输入时只读取一个单词,读取单词后,cin将该字符串放到数组中,并自动在结尾添加空字符。
getline()函数读取整行,使用通过回车键输入的换行符俩确定输入结尾,如果读取参数为20,则函数最多读取19个字符

cin.getline(name,20);//将姓名读入到一个包含20个元素的name数组

get()同getline()函数一样,但get()不再读取并丢弃换行符,而是将其留在输入队列中,使用get()函数后,使用不带任何参数的cin.get()调用可读取下一个字符,为读取下一行输入做好准备,或者将输入中连续的两行分别读入数组中,效果同两次调用cin.getline()相同
以下三种形式输入都相同:

cin.get(name,Size);
cin.get();
cin.get(dessert,Size);
//
cin.get(name,Size).get();
//
cin.get(name,Size).getline(dessert,Size);

当getline()读取空行时,下一条输入语句将在结束读取的位置开始读取,get()读取空行时将设置失效位(failbit),输入将被阻断,但可以用下列命令恢复输入:
cin.clear();
如果输入行包含的字符数比指定的多,则把余下的字符留在输入队列中,getline()还会设置失效位,并关闭后面的输入
下面用一个程序混合输入字符串和数字:

//following number input with line input 混合输入数字和字符串
#include<iostream>
int main()
{
   
    using namespace std;
    int year;
    cout<<"What year was your house built?\n";
    cin>>year;//(cin>>year).get(ch) 下一次输入时会把回车当作空行,赋给下一个数组
    cin.get();//cin.get(ch)  读取并丢弃换行符
    cout<<"what is its street address?\n";
    char address[80];
    cin.getline(address,80);
    cout<<"Year built: "<<year<<endl;
    cout<<"Address: "<<address<<endl;
    cout<<"Done!\n";
    system("pause");
    return 0;
}

cin读取年份,会将回车键生成的换行符留在了队列中,cin,getline()看到换行符,认为是一个空行,并将一个空字符串赋给address数组,应当在读取地址之前所读取并丢弃换行符

3.string类简介

要使用string类,必须在程序中包含头文件string,或者使用std::string来引用它
string对象和字符数组之间的主要区别是,可以将string对象声明为简单变量,而不是数组,并且能自动处理string的大小。
初始化示例:
char first_date[] = {“Le Chapon Dodu”};
char second_date[] {“The Elegant plate”};
string third_date = {“The Bread Bowl”};
string fourth_date {“Hank’s Fine Eats”};
使用string类,可以将一个string对象赋给另一个string对象,并且可以使用运算符+或+=

string str1;
string str2 = "pather";
str1 = str2;
string str3;
str3 = str1+str2;
str1 += str2; //将str2加到str1结尾

函数strlen()从数组的第一个元素开始计算字节数,直到遇到空字符
未初始化的数组,第一个空字符出现的位置随机,长度也是随机,未被初始化的string对象的长度自动设置为0

4.结构简介

结构是用户定义的类型,而结构声明定义了这种类型的数据属性。例:

struct inflatable //关键字  名称
{
   
char name[20];
float volume;
double price;
};//有分号作为结束声明

下面在一个使用结构的程序中使用:

//a simple structure 一个简单的结构使用
#include<iostream>
struct inflatable //structure declaration 结构声明
{
   
    char name[20];
    float volume;
    double price;
};
 
 int main()
 {
   
    using namespace std;
    inflatable guest =
    {
   
        "Glorious Gloria",
        1.88,
        29.99
    };//guest is a structure variable of type inflatable
    //It&#
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值