数组:
C/C++初始化一个数组通过以下几种方式:
1、
int num [10] = {1,2,3};
没有填数字的位置上,自动填充为 0 ;
所以快速将一个数组初始化为0可以在初始化的时候只写一个0;
2、
int num [10];
num[1] = 5;
先声明数组,然后通过下标一个个对元素赋值。
3、
int num = {1,2,3};
这种方式初始化,编译器会通过初始化时大括号内的元素个数来确定这个数组的元素个数。
4、
在C++11 中提供了一种所有数据类型都适用的初始化方式:
int num[10]{1,2,3};
省略了 = 符号,未显示初始化的其他元素编译器也会给它填写0
int num[10]{};
这样初始化,编译器会把所有的元素初始化为 0 .
PS:一般情况下,一种类型的数组只能放置同类型的元素,如果一个char类的数组接受了一个121的整型字面值也是可以的,121在char类型的整型范围内。放个12101就不行了,也不能放浮点类型。
字符串:
在C/C++中有字符串,字符串不是基本类型,在C中可以通过char[]来表示一个字符串,被称为C风格的字符串。而在C++中除了char[],还可以通过复合类型string来表示字符串。先介绍一下char[]代表的字符串。
char[]的初始化:
1、
cahr[10] = {‘b’,’i’,’g’,’\0’};
字符元素的个数要小于char数组声明的元素个数,而且在最后要预留一个元素位置给 ‘\0’ 用于结束字符串。必须注意所有的字符串都会用’\0’结尾,在这种初始化方式中,要显示的写出 ‘\0’ 。
当然也可以这个样子初始化:char[] = {‘b’,’i’,’g’,’\0’};这种情况下,编译器会计算元素个数。
2、
char[10] = “big”;
这种声明的方式不用显示的写出 ‘\0’ ,编译器会在字符串末尾添加’\0’,同样要注意在声明数组时把’\0’也计算到数组个数中。例如,char[10],实际上只能放置9个一般字符,最后一位空出来给空字符的 ‘\0’ 。
当然也可以通过这样的方式初始化:char[] = “big”;编译器会为数组计算元素个数,包括 ‘\0’ 字符。
“abc”:这种值被称为,字符串常量或者字符串字面值。
3、
char[10]{‘b’,’i’,’g’,’\0’};
char[]{‘b’,’i’,’g’,’\0’};
这些初始化方式是和C+11的新特性结合得到的。
输出/入字符串:
在C++中输入和输出字符串可以采用 cin,cout这两个只能对象。
先讨论输入:
首先从键盘输入的字符会保存在缓存队列中。
cin >> str;
cin 方式获取缓存队列中的字符串,当碰到 空格,制表符,回车的时候 cin 就认为已经获取完全字符串。
例如:从界面输入 abc def
cin在缓存区看到了abc和空格之后,认为已经接受完全,就不再接受后续的字符串。
可以通过一个例子来证明
char num1[10]{};
char num2[10]{};
cin >> num1;
cin >> num2;
cout << “num1 = ” << num1 << endl;
cout << “num2 = ” << num2 << endl;
还是从键盘输入 abc def
这个时候 屏幕上会输出两条打印:
num1 = abc
num2 = def
这是因为第一次cin的时候,获取了缓存区的abc 碰到空格之后,认为字符串已经收集完毕。所以第二次cin的时候,把缓存区中剩余的def给取出来了。
获取整行:
很多时候,我们希望程序能够完整的读取一整行,包括这行里的空格。这个时候需要用到iostream类提供的成员函数get/getline。
cin.get():
能获取缓存区的下一个字符,无论是什么字符,即使是’\n’,也可以获取。
cin.get(char[],int):
能获取缓存区中的一串字符,直到碰到’\n’,它不会把 ‘\n’ 取回来,而是碰到 ‘\n’ 就停止获取。然后在获取的字符串末尾加上’\0’
cin.getline(char[],int):
能获取缓存区的一串字符,直到碰到 ‘\n’ ,它会把 ‘\n’ 取回来,然后停止获取,最后会用 ‘\0’ 去替代它。
cin.get(char[],int)和cin.getline(char[],int)都有两个参数,后面的int类型的参数(size)决定了这次获取字符串最大的长度。如果获取的字符串长度超过了 size 的值,函数只会获取 size - 1 个字符,然后停止获取,最后在数组的最后一位上填写 ‘\0’ 。