1、sizeof()与strlen()
关于数组初始化的简单举例:
- 只有在定义数组的时候才可以初始化
- 不能将一个数组赋给另一个数组,但是可以用下表分别给数组中的每一个元素赋值,如: arr[i] = num;
int cards[4]·{3,6,8,10}; // okay
int hand[4]; // okay
hand[4]={5,6.7,9}; //not allowed
hand = cards; //not allowed
//只要显式地将第一个元素初始化为0,然后让编译器将其他元素都初始化为0;
//如果初始化为1)而不是{0},则第一个元素被设置为1.其他元素都被设置为0
long totals[500] = {0};
//如果方括号[]为空时,则C++会计算元素个数,如下:
short things[] = {1,3,5,7} //则此时的数据大小为4
确定存储字符串所需的最短数组时,别忘了将结尾的空字符串计算在内
"S" = 'S' + '\0'
sizeof运算符指出整个数组的长度,但==strlen()==函数返回的是存储在数组中的字符串长度,而不是数组本身的长度。
const int Arsize = 15;
char name2[Arsize] = "C++OWboy";
//通过设置符号常量的地址即可对数组长度进行修改
name2[3] = '\0';
strlen()
对于未被初始化的数据, 第一个空字符的出现位置是随机的,因此您在运行该程序时,得到的数据长度很可能与此不同
get()与getline()的区别
两者都能读取一行输入,知道到达换行符,但是getline()将丢弃换行符,而get()会将换行符保留在输入序列中
面向行的输入:getline()
getline是istream类的一个类方法
getline()函数每次读取一行。它通过换行符来确定行尾,但不保存换行符。相反,在存储字符串时,它用空字符来替换换行符。
#include <istream>
//设要使用gtline(()将姓名读入到一个包含20个元素的nme数组中
//第一个参数是目标数组;第二个参数数组长度
cin.getling(name,20);
面向行的输入:get()
get()会读取换行符(所输入的[enter]需要一个get()消化);用不带任何参数的cin.get()调用可读取下一个字符(即使是换行符),因此可以用它来处理换行符,为读取下一行输入做好准备。
如何消化换行符
#include <iostream>
#include <string>
using namespace std;
int main(int argc,const char* argv[]) {
char charr[20];
string str;
int year;
cout << "请输入年份:";
cin >> year;
cout << "获取char字符串:";
cin.getline(charr, 20);
cout << "获取string字符串:";
getline(cin, str);
cout << "第一次输入为:" << charr << "\t" << "第二次输入为:" << str;
return 0;
}
运行上述代码可以发现:在输入1997以及回车
确定之后,第一个字符串,也就是代码中的cin.getline(charr,20)
将回车键吸收并保留,导致第一次getline()直接被调用。所以可以使用get()函数吸收1997
之后的换行符;
//以下两种方式均可以
//---1---
cin >> year;
cin.get();
//---2---在这里插入图片描述
(cin>>yeat).get();
在添加上述语句之后:便可以正常输入charr
与str
两个字符串。
如有不对的地方,请大家多多指教~