1.复合类型—数组与字符串

1.复合类型—数组与字符串-四曲博客
1.复合类型—数组与字符串
此内容为免费阅读,请登录后查看
0
免费阅读

数组

程序说明

要创建一个数组,可以使用声明语句,数组声明应该指出以下三点:

  • 存储在每个元素中的值的类型
  • 数组名称
  • 数组中的个数
int months[12];

需要注意的是,数组的大小必须是已知的,因此数组的大小不能为变量,因为变量是在运行过程当中动态改变的

数组的初始化规则

  1. 只有在数组定义的时候才能初始化,在过程中可以使用下标的形式对数组进行赋值
  2. 初始化数组时,提供的值可以少于数组的元素数目,其他元素将设定为0,因此可以使用{0}的方式将所有元素设置为0
  3. 如果初始化[]中的个数为0,则编译器会自动计算元素个数
#include <iostream>

using namespace std;

int main(){
    int array1[4]={1,2,3,4};
    int array2[]={5,6,7,8};

    for (int i=0;i<4;i++){
        cout << "array1:" << array1[i] << endl;
    }

    for (int i=0;i<4;i++){
        cout << "array2:" << array2[i] << endl;
    }
}
// array1:1
// array1:2
// array1:3
// array1:4
// array2:5
// array2:6
// array2:7
// array2:8

C++11 数组初始化方法

  1. 初始化数组时,可以省略等号
  2. 可以不在大括号内包含任何东西,这将会把所有元素都设置为0
  3. 列表初始化禁止缩窄转换(将范围大的数组转换成小数据)
#include <iostream>
//需要使用g++ test4_1_2.cpp -std=gnu++11 进行编译
using namespace std;

int main(){
    int array1[4] {1,2,3,4};
    int array2[4] {};

    for (int i=0;i<4;i++){
        cout << "array1:" << array1[i] << endl;
    }

    for (int i=0;i<4;i++){
        cout << "array2:" << array2[i] << endl;
    }
}
// array1:1
// array1:2
// array1:3
// array1:4
// array2:0
// array2:0
// array2:0
// array2:0

字符串

对与C-风格字符串来说,字符串的末尾都用空字符串(\0)来进行结尾,因此,字符串的长度是从指针开始的地方到空字符串的位置

如果使用字符数组的方式创建字符串,则必须要在末尾添加空字符串

如果使用双引号的方式来创建字符串,则会自动将空字符串包裹在内,不用显示声明

char string1[3]={'n','i','\0'};
char string2[6]="nihao";  //包括空字符串在内

字符串常量与字符常量不能互换,因为两者有本质的区别

char a='S';   //只有一个字符
char b="S";   //有两个字符,一个'S',还有一个空字符串\0

拼接字符串常量

在C++中,任何两个由空白(空格、制表符、换行符)分割的字符串常量都将自动拼接成一个,第一个的空字符串会被第二个字符串的第一个字符替换,两者之间也不会添加空格

#include <iostream>

using namespace std;

int main(){
    char s[]="nihao""world";
    cout << s << endl;
}
// nihaoworld

字符串的输入

cin的输入是以空白(空格、制表符和换行符)来确定输入结束的,因此使用cin几乎只能读取一行输入

使用cin.getline()来进行输入一行,这个函数以回车结尾

  • 第一个参数:存储输入行的数组
  • 第二个参数:要读取的字符数,如果为20,最多读取19个,给空字符串留位置

使用cin.get()函数来进行输入,该函数与getline的参数相同,判断方式相同,但是get并不会丢弃换行符,而是会将它保留

使用不带参数的get函数将读取下一个字符,因此,我们可以使用get函数来跳过保留的换行符

可以使用两个get()的拼接来读入两行

#include <iostream>

using namespace std;

int main(){
    char string1[10];
    char string2[10];
    char string3[10];

    cin.getline(string1,6); //数量包含空字符串在内

    cin.get(string2,6);     //读取第二行
    cin.get();
    cin.get(string3,6);     //读取第三行

    cout << "string1:"<< string1 << endl;
    cout << "string2:"<< string2 << endl;
    cout << "string3:"<< string3 << endl;
}
// nihao
// world
// sijie
// string1:nihao
// string2:world
// string3:sijie

String类

string类位于std命名空间内,因此必须使用一调using编译指令,或者使用std::string来引用它,也必须在开头包含头文件string,能够将字符串作为普通变量来处理

  • 可以使用C-风格字符串来初始化string对象
  • 可以使用cin将键盘输入存储到string对象中
  • 可以使用cout来显示string对象
  • 可以使用数组表示法来访问存储在string对象中的字符

赋值、拼接和附加

可以将一个string对象赋值给另外一个string对象

可以使用+号将两个string对象直接进行拼接

可以使用+=号来将一个string对象

#include <iostream>
#include <string>
using namespace std;

int main(){
    string a="hello";
    string b="world";

    string c=a;             //直接进行赋值
    c+=b;                   //进行字符串拼接

    cout << a+b << endl;
    cout << c << endl;
}
// helloworld
// helloworld

string类的I/0

可以使用cin和运算符<<来将输入存储到string对象中,使用cout和运算符<<来显示string对象,但是每次读取一行而不是一个单词时,使用的句法不同

#include <iostream>
#include <string>
using namespace std;

int main(){
    string a;
    string b;
    cout << a.size() << endl;   //没有初始化,大小为0
    cin >> a; //只能输入一个单词
    cout << "a:"+a <<endl;

    cin.get();
    getline(cin,b); 
    //将cin作为参数,指出到哪里找输入
    //将string对象b传入参数,可根据字符串长度自动让b调整大小

    cout << "b:"+b << endl;
}
// helloworld
// helloworld

其他形式的字符串字面值

除了char类型之外,C++中还有类型wchar_t,而C++11中新增了类型char16_t和char32_t,可以使用这些类型创建字符串,分别使用前缀L、u、U表示

还可以使用原始字符串(RAW)来表示,在原始字符串中,所有的字符都表示自己,原始字符串使用“(”和“)”来作为定界符,并使用前缀R来标识原始字符串,如果要打印出括号怎么办?可以在第一个"和(之间使用其他字符,在结尾也是一样即可

#include <iostream>
#include <string>
using namespace std;
//需要使用g++ test4_1_2.cpp -std=gnu++11 进行编译
int main(){
    wchar_t title[]=L"hello,world";
    char16_t name[]=u"siqu";
    char32_t age[]=U"54";

    cout << title <<endl;
    cout << name <<endl;
    cout << age << endl;
    cout << R"(this is Raw string \n)" << endl;
    cout << R"+(this is Raw string1 )+" << endl;
}
// 0x6dfed8
// 0x6dfece
// 0x6dfec0
// this is Raw string \n
// this is Raw string1
© 版权声明
THE END
喜欢就支持以下吧
点赞101 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容