C++学习 --string

本文详细介绍了C++中的string类,包括其创建方式(普通、拷贝构造、指定长度)、赋值操作(整体和部分),以及字符串的拼接、替换、插入、查找、子串提取、比较、空检查、清空、长度获取、单字符操作和格式化输出等内容。
摘要由CSDN通过智能技术生成

目录

1, 什么是string

2, 创建string

2-1,普通创建 

2-2, 拷贝构造创建

2-2-1, 整体拷贝

2-2-2, 部分拷贝

2-3, 指定长度创建

3, 赋值(assign)

3-1, 拷贝构造赋值

3-1-1, 整体赋值

3-1-2, 部分赋值

3-2, 指定长度赋值

4, 拼接

4-1, 拼接(+)

4-2, 拼接(append)

4-2-1, 整体拼接

4-2-2, 部分拼接

5, 替换(replace)

6, 插入(insert)

7, 查找(find)

8, 子串(substr)

9, 比较(compare)

10, 空检查(empty)

11, 清空

11-1, 清空(clear)

11-2, 清空(erase)

12, 获取长度

12-1, 长度(length)

12-2, 长度(size)

13, 交换(swap)

14, 单字符

14-1, 单字符([])

14-2, 单字符(at)

14-3, 单字符(front)

14-4, 单字符(back)

14-5, 单字符(pop_back)

14-6, 单字符(push_back)

15, 格式化输出


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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值