目录
1, 什么是string
C++中的字符串, 本质是一个类
2, 创建string
2-1,普通创建
通过string 对象名, 创建string
//创建并赋值
string str1 = "bbb";
2-2, 拷贝构造创建
2-2-1, 整体拷贝
通过string 对象名(字符串对象), 创建string
string str1 = "bbb";
//创建str2并赋值str1
string str2(str1);
//创建str3并赋值bbb
string str3("bbb");
2-2-2, 部分拷贝
通过string 对象名(字符串对象, 起始索引, 字符数), 创建string, 此时拷贝部分字符赋值给对象名
string str1 = "abcdefg";
//将拷贝cde赋值给str2
string str2(str1, 2, 3);
//将拷贝cde赋值给str3
string str3("abcdefg", 2, 3);
注意:若没有给字符数, 参数为字符串变量和常量字符串时, 结果不同
string str1 = "abcdefg";
//将拷贝cdefg赋值给str2
string str2(str1, 2);
//将拷贝ab赋值给str3
string str3("abcdefg", 2);
2-3, 指定长度创建
通过string 对象名(长度, 单个字符), 创建string
//定义5个a组成的字符串
string str3(5, 'a');
3, 赋值(assign)
3-1, 拷贝构造赋值
3-1-1, 整体赋值
通过对象名.assign(字符串), 进行string对象赋值
string str1 = "abcdefg";
string str2;
string str3;
//将str1赋值给str2
str2.assign(str1);
//将abcdefg赋值给str3
str3.assign("abcdefg");
3-1-2, 部分赋值
通过对象名.assign(字符串, 起始索引, 字符数), 进行string对象赋值
string str1 = "abcdefg";
string str2;
string str3;
//将cde赋值给str2
str2.assign(str1, 2, 3);
//将cde赋值给str3
str3.assign("abcdefg", 2, 3);
注意:若没有给字符数, 参数为字符串变量和常量字符串时, 结果不同
string str1 = "abcdefg";
string str2;
string str3;
//将cdefg赋值给str2
str2.assign(str1, 2);
//将ab赋值给str3
str3.assign("abcdefg", 2);
3-2, 指定长度赋值
string str1;
//str1由5个a组成
str1.assign(5, 'a');
4, 拼接
可通过符号"+"和append方法, 可实现字符串拼接
4-1, 拼接(+)
通过对象名1+对象名2, 拼接两个字符串
string str1 = "abc";
string str2 = "def";
//输出abcdef
cout << str1 + str2 << endl;
//输出abcdef
cout << str1 + "def" << endl;
注意:不支持两个字符常量向加
//编译器会报错
cout << "abc" + "def" << endl;
4-2, 拼接(append)
4-2-1, 整体拼接
通过对象名1.append(对象名2)拼接, 注意,这里的对象名1不能为常量字符串
string str1 = "abc";
string str2 = "def";
string str3 = "abc";
//输出abcdef
str1.append(str2);
//输出abcdef
str3.append("def");
4-2-2, 部分拼接
通过对象名1.append(对象名2, 起始索引, 字符数), 指定字符数拼接, 注意,这里的对象名1不能为常量字符串
string str1 = "abc";
string str2 = "def";
string str3 = "abc";
//输出abcef
str1.append(str2, 1, 2);
//输出abcef
str3.append("def", 1, 2);
注意:若没有给字符数, 参数为字符串变量和常量字符串时, 结果不同
string str1 = "abc";
string str2 = "def";
string str3 = "abc";
//输出abcef
str1.append(str2, 1);
//输出abcd
str3.append("def", 1);
5, 替换(replace)
通过对象名.replace(起始索引, 结束索引, 替换值), 可替换字符串内容, 其中的替换值长度没有限制
string str1 = "abcdef";
string str2 = "abcdef";
string str3 = "abcdef";
//str1变为a111ef
cout << str1.replace(1, 3, "111") << endl;
//str1变为a1ef
cout << str2.replace(1, 3, "1") << endl;
//str1变为a1111ef
cout << str3.replace(1, 3, "1111") << endl;
6, 插入(insert)
通过对象名.insert(索引, 值), 向字符串中插入数据
string str1 = "abc";
string str2 = "abc";
//str1变为aabcbc
str1.insert(1, "abc");
//str2变为aabcbc
str2.insert(1, str2);
7, 查找(find)
通过对象名.find(), 可查找字符串中的子串, 从左开始查找, 返回首次匹配索引, 未找到返回一个很大的整数
string str1 = "abccba";
//返回索引2
cout << str1.find("c") << endl;
//没有找到匹配的,返回18446744073709551615
cout << str1.find("d") << endl;
通过对象名.find(), 可查找字符串中的子串, 从右开始查找, 返回首次匹配索引, 未找到返回一个很大的整数
string str1 = "abccba";
//返回索引3
cout << str1.rfind("c") << endl;
//没有找到匹配的,返回18446744073709551615
cout << str1.rfind("d") << endl;
8, 子串(substr)
通过对象名.substr(起始索引, 结束索引), 返回起始索引~结束索引的字符
string str1 = "abccba";
//返回bcc
cout << str1.substr(1, 3) << endl;
9, 比较(compare)
通过对象名1.compare(对象名2), 进行比较字符串大小, 逐个比较两个字符串的Ascii码, 相等返回0, 对象名1大于对象名2返回1, 对象名1小于对象名2返回-1
string str1 = "hello c++";
string str2 = "1hello c++";
//返回1
cout << str1.compare(str2) << endl;
10, 空检查(empty)
通过对象名.empty(), 检查一个字符串是否为空, 为空返回1, 不为空返回0
string str1 = "";
string str2;
//返回1
cout << str1.empty() << endl;
//返回1
cout << str2.empty() << endl;
11, 清空
11-1, 清空(clear)
通过对象名.clear(), 可清空一个字符串
string str1 = "abc";
//清空str1
str1.clear();
//返回1
cout << str1.empty() << endl;
//返回0
cout << str1.length() << endl;
11-2, 清空(erase)
通过对象名.erase(), 可清空一个字符串
string str1 = "abc";
//清空str1
str1.erase();
//返回1
cout << str1.empty() << endl;
//返回0
cout << str1.length() << endl;
12, 获取长度
12-1, 长度(length)
通过对象名.length(), 返回字符串长度
string str1 = "abc";
//返回3
cout << str1.length() << endl;
12-2, 长度(size)
通过对象名.size(), 返回字符串长度
string str1 = "abc";
//返回3
cout << str1.size() << endl;
13, 交换(swap)
通过对象名1.swap(对象名2), 交换两个字符串的值
string str1 = "abc";
string str2 = "def";
str1.swap(str2);
//str1为def
cout << str1 << endl;
//str2为abc
cout << str2 << endl;
14, 单字符
14-1, 单字符([])
通过对象名[索引], 获取单个字符
string str1 = "abc";
//返回b
cout << str1[1] << endl;
//修改
str1[1] = '1';
//a1c
cout << str1 << endl;
14-2, 单字符(at)
通过对象名.at(索引), 获取单个字符
string str1 = "abc";
string str2 = "def";
//返回b
cout << str1.at(1) << endl;
//修改
str1.at(1) = '1';
//a1c
cout << str1 << endl;
14-3, 单字符(front)
通过对象名.front(), 获取首字符
string str1 = "abc";
//返回a
cout << str1.front() << endl;
14-4, 单字符(back)
通过对象名.back(), 获取尾字符
string str1 = "abc";
//返回c
cout << str1.back() << endl;
14-5, 单字符(pop_back)
通过对象名.pop_back(), 删除尾元素
string str1 = "abc";
//删除尾元素
str1.pop_back();
//返回ab
cout << str1 << endl;
14-6, 单字符(push_back)
通过对象名.push_back(字符), 在尾部插入单个字符
string str1 = "abc";
//在尾部插入元素d
str1.push_back('d');
//返回abcd
cout << str1 << endl;
15, 格式化输出
通过头文件#include <iomanip>, 可制定格式化输出
//setw(5):设置输出位宽为5位
//setfill('0'):多余为填充0
//right:右对齐
//注意:规则是从setw开始,所以前面的a_原样输出
for (int i = 0; i < 15; i++)
{
cout << "a_" << setw(5) << setfill('0') << right << to_string(i) << endl;
}
--------------------------------------------------------
输出为
a_00000
a_00001
a_00002
a_00003
a_00004
a_00005
a_00006
a_00007
a_00008
a_00009
a_00010
a_00011
a_00012
a_00013
a_00014