数组
程序说明
要创建一个数组,可以使用声明语句,数组声明应该指出以下三点:
- 存储在每个元素中的值的类型
- 数组名称
- 数组中的个数
int months[12];
需要注意的是,数组的大小必须是已知的,因此数组的大小不能为变量,因为变量是在运行过程当中动态改变的
数组的初始化规则
- 只有在数组定义的时候才能初始化,在过程中可以使用下标的形式对数组进行赋值
- 初始化数组时,提供的值可以少于数组的元素数目,其他元素将设定为0,因此可以使用
{0}
的方式将所有元素设置为0 - 如果初始化
[]
中的个数为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 数组初始化方法
- 初始化数组时,可以省略等号
- 可以不在大括号内包含任何东西,这将会把所有元素都设置为0
- 列表初始化禁止缩窄转换(将范围大的数组转换成小数据)
#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
暂无评论内容