1. 定义初始化string对象
string s1; // 默认初始化,s1 = ""; 空串,里面无字符;
string s2 = "I Love China!"; // 将"I Love China!"拷贝到s2中,不会拷贝'\0'
string s3(""I Love China!"); // 同上
string s4 = s2; // 拷贝构造
string s5(s4); // 拷贝构造
const char* p = "ABC";
string s6(p); // 用c的字符串初始化string对象
string s7(3, 'a'); // 将s7初始化为3个'a'组成的字符串
2. string常用函数
2.1 empty 判断是否为空串
string s1;
if(s1.empty()) {
}
2.2 size和length 无区别,计算string对象中字符个数,不包括'\0'
string s1;
s1.size(); // 0
s1.length(); // 0
string s2 = "我爱中国";
s2.size(); // 8
s2.length(); // 8
string s3 = "I Love China!";
s3.size(); // 13
s3.length(); // 13
2.3 s[n] 返回s对象中第n个字符
void test() {
string s = "abc";
s[0] = 'A';
cout << s << endl; // Abc
}
2.4 字符串拼接
void test() {
string s1 = "abc";
string s2 = "123";
string s3 = s1 + s2 + " ! " + "xyz" + s1; // 发生隐式类型转换,都转为string类型
cout << s3 << endl; // abc123 ! xyzabc
// 但是如下无法发生隐式类型转换,原因不再赘述
string s4 = "123" + "abc" + s1; // 编译不通过
}
2.5 s1 == s2或s1 != s2 判断两字符串内容是否相同
void test() {
string s1 = "ABC";
string s2 = "ABC";
string s3 = "123";
cout << (s1 == s2) << endl; // 1
cout << (s1 == s3) << endl; // 0
/* 下面的比较都是字面量的比较,编译器比较它们的地址,通常相同的字面量存储在同一内存区域 */
cout << ("123" == "123") << endl; // 1
cout << ("ABC" == "abc") << endl; // 0
}
2.6 s.c_str() 返回指向s中字符串地址常量指针(包含'\0')
再次提醒:string s,则s中不包含‘\0’,因为string类有管理字符串长度的方式;但s.c_str()是包含末尾'\0'的,这是C中的字符串风格。
string s1 = "abc";
const char* p = s1.c_str();
2.7 范围for对string的使用
string s1 = "ABC";
for(auto& c : s1) {
cout << c << endl; // 会逐个字符输出
}
待补充。