1.字符串
1.1定义和初始化string对象
string s1;//默认初始化s1是一个空字符串
string s2(s1);//s2是s1的副本
string s2 = s1;//等价于s2(s1),s2是s1的副本
string s3("value");//s3是字面值“value”的副本,除了字面值最后的那个空字符外
string s3 = "value";//同s3("value")
string s4(10,'c');//把s4初始化为由连续10个字符c组成的串
如果使用等号初始化,其实执行的是拷贝初始化,编译器把等号右侧的初始值拷贝到新创建的对象中去。如果不用等号,则为直接初始化。
1.2string对象上的操作
读写string对象:
string s;//定义string
cin >> s;//将string对象读入s,遇到空白停止
cout << s << endl;//输出s
读取未知数量的string对象:
string word;
while (cin >> word) {
cout << word << endl;
return 0;
}
使用getline读取一整行:
string line;
while (getline(cin, line)) {
cout << line << endl;
}
empty和size:
string line;
while (getline(cin, line)) {
//empty返回字符串是否为空,若为空则跳过
if (!line.empty()) {
cout << line << endl;
}
}
string line;
while (getline(cin, line)) {
//size返回字符串大小,若小于80则跳过
if (line.size() < 80) {
cout << line << endl;
}
}
string::size_type 类型:
对于size函数来说,返回一个int或者返回一个unsigned似乎是合情合理的。但是size函数返回的是一个string::size_type。由于size函数返回的是一个无符号整型数,因此切记,如果在表达式中混用了带符号数和无符号数将可能产生意想不到的结果。例如:假设n是一个具有负值的int,则表达式s.size()<n
的判断结果几乎是肯定是true。因为负值n会自动转化为一个比较大的无符号数。