文章目录
1、顶层const与底层cosnt
-
顶层是针对于指针或者引用而言,任何类型都可以是顶层const;
-
底层是针对指针对象或引用对象而言。
for example:
int i = 0;
int * const p1 = &i; //顶层const,不可以改变p1的值
const int j = 1; //顶层const
const int *p2 = &j; //底层const,可以改变p2所指对象,但不能改变j的值
2、命名空间using namespace的注意事项
在头文件中一般不添加using声明。原因是一旦其他文件包含了此头文件,也就等同于添加了using声明,而对有些程序而言,不经意间添加的命名空间,可能会引起变量命名冲突。
3、字符串
- 字符串的初始化有两种方式,一种是直接初始化,另一种是拷贝初始化。
string s1 = "hello";//拷贝初始化;
string s2(5,'c'); //直接初始化,s2="ccccc";
getline(输入流,string对象)
可以获得一行。读的时候把换行符也读入,但是对象中存入的内容不包括换行符。例如下面的例子可以整行读入。
#include <iostream>
#include <string>
using namespace std;
{
string myline;
while(getline(cin,myline))
cout<<myline<<endl;//myline中不包括换行符
//所以使用endl结束当前行并刷新显示缓冲区
return 0;
}
string对象相加
加号两侧可以是两个string对象,也可以是一个string对象,一个string字面值,但不能是两个string字面值。如:
string s1 = "Hello";
string s2 = " ,Word!";
string s3 = s1 + s2; //正确
string s4 = s1 + ",word!"//正确
string s5 = "Hello" + " ,word!";//错误
/*在python中可以两个字面值相加。*/
cctype
C++中的库。一般而言,C中的库包含.h,即name.h,而C++中的则为cname。另外,C++中的库名称命名在命名空间中,C的则不然。
下面是一个统计标点符号个数的例子:
string s = "Hello World!!!";
decltype(s.size()) punct_count = 0;//punct_count 的类型和s.size()的返回类型一致。
for(auto c : s) //定义auto类型变量c,并逐个从s的字符中赋值
if(ispunct(c))
punct_count++;
cout<<punct_count<<"puncts in string:"<<s<<endl;
//输出:3 puncts in string Hello World!!!
strstr
strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回 str1字符串从 str2第一次出现的位置开始到 str1结尾的字符串;否则,返回NULL。
snprintf
int snprintf(char* dest_str,size_t size,const char* format,…);
将可变个参数(…)按照format格式化成字符串,然后将其复制到str中。
char str[16];
snprintf(str,5,"%03d",12);
printf("str=%s\n",str) //str=012, %03d表示传入数据不足3位时用0补充
snprintf(str,5,"%03d",1234567);
printf("str=%s\n",str) //str=12345, 第二个数5是控制str最大宽度的。
strrchr
strrchr(string,char) 函数查找字符在指定字符串中从右面开始的第一次出现的位置,如果成功,返回该字符以及其后面的字符,如果失败,则返回 NULL。与之相对应的是strchr()函数,它查找字符串中首次出现指定字符以及其后面的字符。
4、vector
string word;
vector<string> text;
while (cin>>word)
text.push_back(word);