浮点常量
在程序中使用浮点数,在默认情况下像2.2或者2.4E8这样子的浮点常量都是属于double类型的。但是如果希望常量是float类的,需要使用f或者F后缀。希望常量为long double类型的,使用l或者L后缀。示例如下:
1.234f // a float constant
2.45E20F// a float constant
2L // a long double constant
C风格字符串
C风格字符串使用一个char的数组进行字符串的存储。C风格字符串有一种特殊的性质:以空字符(null character)结尾,空字符被写作\0,其ASCII码为0,用来标记字符串的结尾。示例如下:
char a[4] = {'a','b','c','d'}; // not a string!
char b[4] = {‘a’,'b','c','\0'}; // a string!
这样初始化字符串显然是非常麻烦的,我们可以使用下面这样子的方法对字符换进行初始化:
char bird[6] = "bird" // 编译器会自动添加 ‘\0’并且把数组剩下的位置全部填充'/0'
char bird[] = "bird" // 编译器会自动计算大小
当使用键盘输入字符串的时候,C++会自动计算长度并且添加‘\0’,当然,你需要实现指明数组的长度,并且这个长度不能少于字符串长度+1(strlen(string)+1)。
由于在cin当中,会自动认为空格后者换行符是一个字符串结束的标志,所以当我们需要读取带有空格的字符串的时候需要使用cin.getline方法,示例如下:
#include <iostream>
int main()
{
using namespace std;
const int ArSize = 20;
char name[ArSize];
char universityName[ArSize];
cout << "Enter your name" << endl;
cin.getline(name, ArSize); // 把这一行读取到name数组当中,如果这行的字符不超过 ArSize-1 = 19 个
cout << "Enter your university name" << endl;
cin.getline(universityName, ArSize);
cout << "You are " << name << ", and you are from " << universityName;
}
输出结果
Enter your name
Simon Feng
Enter your university name
SCUT
You are Simon Feng, and you are from SCUT
此外,还有一种进行输入的方式那就是cin.get()方法。
上面代码当中如果使用cin.get()方法进行输入,就会出现问题。因为,cin.getline()会自动丢弃输入队列当中的换行符,而cin.get()不会自动丢弃,所以我们要使用一个不带任何参数的get()方法先将换行符进行读取。
cin.get(name,ArSize); // read first line
cin.get(); // read newline
cin.get(universityName,ArSize); // read the second line
/**
也可以使用cin.get(name,ArSize).get();的方式去替换上面第一二行,因为cin.get()方法会返回一个cin的对象
**/
string类
string类的使用大家应该都明白,非常方便,和C风格字符串相比有以下的共同处:
1)可以使用C风格的字符串对象初始化string对象。
2)可以使用cin来将键盘的输入序列存储到string对象中。
3)可以使用cout来显示string对象。
4)可以使用数组表示的方法来访问存储在string对象当中的字符。
需要注意的是,不能将一个数组赋值给另外一个数组,但是可以将一个string对象赋值给另外一个string对象。数组需要使用strcpy和strcat函数。
strcpy(charr1, charr2); // copy charr2 to charr1
strcat(char1, charr2); // append contents if charr2 to charr1
union公共体
这个数据格式在我以前的印象当中基本上没有见过,所以在这里写一下。
共用体union是一种数据格式,它能够存储不同的数据类型,但是只能同时存储其中的一种类型。也就是说,结构体(struct)可以同时存储int、long和double,共用体只能存储int、long或者double。共用体的句法与结构相似,但是含义不同。
示例,输入
union one4all
{
int int_val;
long long_val;
double double_val;
};
... // pass
one4all pail;
pail.int_val = 15; // store an int
cout<< pail.int_val << "\n";
cout<< pail.double_val << "\n";
pail.double_val = 22.1;
cout<< pail.int_val << "\n";
cout<< pail.double_val << "\n";
输出
15
7.41098e-323
-1717986918
22.1