预处理保护符
#ifndef SALES_DATA_H
#define SALES_DATA_H
.....
.....
#endif
#ifdef 当且仅当变量已定义时为真,#ifndef当且仅当变量为定义时为真。一旦检查结果为真,则执行后续操作直至遇到#endif指令为止。使用这些功能就能有效防止重复包含发生。通常做法是基于头文件中类的名字来构建保护符的名字,以确保唯一性。为了避免与程序中其他实体发生名字冲突,一般把预处理变量的名字全部大写。
-------------------------------------------------------------------------------------------------------------------------
标准库类型string
可变长的字符序列
#include <string>
using std::string
string s2(s1) s2是s1的副本
string s2=s1 同上
string s3("value") s3是字面值"value"的副本,除了字面值最后的那个空字符外
string s3= "value" 同上
string s4(n,'c') 把s4初始化为由连续n个字符c组成的串
2.string的操作
os<<s 将s写到输出流os当中,返回os
is>>s 从is中读取字符串赋给s,字符串以空白分隔,返回is
getline(is,s) 从is中读取一行赋给s,返回is
s.empty() s为空返回true,否则返回false
s.size () 返回s中字符的个数,返回类型为string::size_type,是一个无符号整型数
s[n] 返回s中第n个字符的引用,位置n从0计起
s1+s2 返回s1和s2连接后的结果
s1=s2 用s2的副本代替s1中原来的字符
s1==s2、s1!=s2 等性判断,对大小写敏感
<,<=,>,>= 利用字符在字典中的顺序进行比较
读取未知数量的string对象
int main ()
{
string word;
while (cin>>word) //反复读取,直至文件末尾
cout<<word<<endl; //逐个输出单词,每个单词后紧跟一个endl换行
return 0;
}
使用getline整行整行输出
int main()
{
string line ;
while (getline (cin,line))
cout<<line<<endl
return 0;
}
string的比较
1. 如果两个string对象的长度不同,而且较短的string对象的每个字符都与较长string对象对应位置上的字符相同,则说较短的string小于较长的string;
2. 如果两个string对象在某些对应位置上不一致,则string对象比较的结果实际是string对象中第一对相异字符比较的结果。
string的相加
注意:当把string对象和字符字面值及字符串字面值混在一条语句中时,必须确保每个加法运算符的两侧至少有一个string对象
例如: string s7="hello"+","+s2//错误,可改成string s7="hello"+(","+s2)