1.字符串
注意:1.单引号和双引号的区别。
可以这样赋值char a='S'
但是不能这样赋值char a="S"
因为"S"
实际上表示的是字符串所在的内存地址,而'S'
只是ASCII码83的另一种写法。
2.strlen()只计算可见字符,不把空字符计算在内。
读入空格所需的get()和getline()
面向行的输入getline():
调用方法:
1.用cin.getline(),有两个参数,第一个用来储存输入行的数组名称,第二个是要读取的字符数
cin.getline(name,20)
面向行的输入get():
与getline()类似,但并不再读取并丢弃换行符,而是将其留在输入队列中。
若连续调用两次get(),由于第一次调用后,换行符留在输入队列中,所以第二次调用所显示的只会是换行符,不会是输入的内容。应在中间加一次cin.get()处理换行符。或者用cin.get(,).get()
拼接起来。
注意:当get或者getline输入大于内存的字符串时,多出部分会留在输入队列中,getline还会设置失效位(failbit)并关闭后面输入。
可用cin.clear();
来恢复,让错误标识改回为0,可继续输入,再用cin.syn()
来清空流
2.string类
声明和赋值:
string str1; string str2="panther";
类设计让程序能够自动处理string的大小。
优点:数组不能赋给另一个数组,但是可用将一个string对象赋给另一个string对象
str1=str2;
也可用+来将两个string对象合并。
3.结构
同一个结构,可以储存多种类型的数据。
例:
声明:
struct a {
char name[];
float a;
double b;
}
使用:
a use =
{
"my name",
20,
5
}
使用结构中某个成员时用成员运算符(.)来访问各个成员(感觉与类的对象相似)
结构数组:
a use[2]=
{
{"name1",2,20},
{"name2",20,30}
}
4.New
new会找到一个长度正确的内存块,并返回该内存块的地址。而我们的责任则是将该地址赋给一个指针。
格式:
typename * pointer_name=new typename;
注意:用delete来释放内存delete a;
归还和释放的内存可供程序其他部分使用。
使用new来创建动态数组
创建:int* a=new int [10];
new会返回第一个元素的地址,然后地址赋给a。
释放:delete [] a;
要多加一个[ ],告诉程序释放的是整个数组,而不是仅仅指针指向的元素。
使用:把指针当数组名使用即可。
如:a=a+1;是指a数组的第二个元素,而不是第一个元素的值加1。
使用方括号数组表示法等同于对指针解除引用
a[0] == *a;
a[3] ==*(a+3);
cout识别打印为第一个字符串的地址时,会继续打印,直到空字符为止。
使用new创建动态结构
创建:a * ps=new a;
访问成员的方法:不能用(.)只能用(->)
如:ps->price
是被指向结构的price成员,它相当于ps.price
《C++ Primer Plus》p70-117