char c[5]={'0','1','2','3','4'};//不是一个字符串
cout<<c;//输出是01234和某处停止的‘\0’,在'\0'之前大概率都是烫烫烫
char c[5]={'0','1','2','3','\0'};//是一个字符串
cout<<c;//输出是01234
char c[NUM]="";//隐式定义字符串。num可以指定,也可以空着,编译器会自动生成大小,不必显示的添加‘\0’,仍然是一个字符串
当键盘输入cin时,编译器将自动为char数组加上结尾的空字符。
sizeof(c);//返回的是数组的长度
strlen(c);//返回的是数组中字符串的长度,不包括空字符(‘\0’)
cin使用空格、制表符、换行符来去确定字符串的结束位置。
为实现整行读入,可以使用类成员函数getline()和get()。
getline()通过换行符确定行尾,但不保存换行符。相反,在存储字符串时,他用空字符来替换换行符。
get()保存换行符,这是它相较于getline的优点,当输入结束的时候可以通过判断是否是因为换行符进行的换行。
cin.get(c,numsize).get();//可以把换行符保存起来
另一个问题是,字符串和数字一起输入的时候会有问题。
需要通过get()获取数字后面的那个换行符。
char c[NUM];
int year;
char a;
cin >> year;
cin.get(a);
在读取char值时,与读取其他基本类型一样,cin将忽略空格和换行符。因此输入字符时,空格不会被cout回显,也不会被包括在计数内。
char c;
cin.get(c);
int count = 0;
while (c != '#')
{
cout << c ;
count++;
cin.get(c);
}
cout << count << endl;//输出是没有空格制表符的,count数值等于字符数(不包括空格)
更为复杂的是,发送给cin的数据会被缓冲,当遇到换行符时,才会被发送给程序处理,因此在遇见读取终止符后仍然可以读取。
想空格一起输出并记入计数,需要用cin.get( c )代替cin>>c;
< 是unix和windows命令提示符模式下的重定向运算符。
EOF作为文件的结束标志,可用cin.fail()和cin.eof()来查看,当到达结束标志符时,这两个函数返回True,否则返回false。