PAT考试C++总结(三)
1.C++也支持string类型的相加,但是下面的例子是错误的:
string a="hello"+"world";
因为C++默认将“hello”和“world”识别为char类型的数组而不是string类型
2.double类型的输入输出是%lf,float类型的是%f,因为储存方式不同,一个是8地址,一个是4地址,最好不要混用,不然可能会出错
3.十进制化n进制:反复除n取余数,除n的得数再取余数,直到得数为0,把余数按顺序从低位到高位写出即可,比如1234换八进制,第1次除8得154余2,154除8得19余2,19除8得2余3,2除8得0余2,所以最后得到2322
4.stringstream如果要多次进行类型转换,在每进行一次以后,需要用clear()方法清除对象数据,如下:
int a,b;
string c,d;
stringstream ss;
ss<<a;
ss>>c;
ss.clear();
ss<<b;
ss>>d;
5.reverse()方法:可以用来反转地址a到地址b之间的内容,使用时需要添加头文件algorithm
string a="ab";
reverse(a.begin(),a.end());//进行这一步操作后,a的值为ba
6.用scanf获取字符的时候如果有换行在输入里,需要在适当的位置使用getchar()获取换行,避免换行被当作字符获取
7.scanf获取string类型,需要先为string类型分配足够的空间,因为scanf是标准输入流,没有缓存区,需要预先分配空间,而cin是输入流,它使用了缓冲区。如果要使用scanf读入字符串,那就一定要事先为它申请足够的内存空间,例如:
string a;
a.resize(100);
scanf("%s",&a[0]);
8.指针对象指向某一处地址,如果你希望赋值以后初始的更改了指针对象的值也发生更改的话就用指针吧。对于指针的初始化下面说的这两种方式的结果是不同的,c=&a
和*c=a
,在没有指定指针c的地址前,是不可以使用后者改变指针对应的值的,前者是修改c指向的地址指向对象a,当a的值改变时,c也会更改。后者只是单纯更改指针c的值,指针c指向的地址不变
#include<iostream>
using namespace std;
int main(){
int a=3;
int b,*c;
b=a;
c=&a;
cout<<b<<" "<<*c<<endl;;
a=4;
cout<<b<<" "<<*c<<" "<<c<<" "<<&a<<endl;
*c=3;
cout<<b<<" "<<*c<<" "<<c<<" "<<&a;
return 0;
}
结果如下: