C++字符串操作全解析
在C++编程中,字符串是一种非常常用的数据类型。它不仅可以用于存储和处理文本信息,还可以通过各种操作实现强大的功能。本文将详细介绍C++中字符串的构造、赋值、拼接、查找、替换、插入、删除、比较以及字符存取等常用操作。
一、字符串的构造
字符串的构造方式非常灵活,以下是几种常见的构造方式:
cpp复制
#include <iostream>
#include <string>
using namespace std;
void test1()
{
string s1; // 默认构造,空字符串
const char* str = "Hello"; // C风格字符串
string s2(str); // 从C风格字符串构造
string s3(9, 'a'); // 构造一个包含9个字符'a'的字符串
string s4(s2); // 拷贝构造
cout << s2 << endl << s3 << endl << s4 << endl;
}
-
默认构造:创建一个空字符串。
-
从C风格字符串构造:将C风格字符串转换为C++字符串。
-
指定字符重复构造:通过指定字符和重复次数构造字符串。
-
拷贝构造:通过已有的字符串构造新字符串。
二、字符串的赋值
字符串的赋值可以通过多种方式实现,包括直接赋值、使用assign
函数等:
cpp复制
#include <iostream>
#include <string>
using namespace std;
void test2()
{
// 直接赋值
string s1;
s1 = 'a';
cout << s1 << endl;
string s2;
s2 = "Hello World";
cout << s2 << endl;
string s3;
s3 = s2;
cout << s3 << endl;
// 使用assign函数赋值
string s4;
s4.assign("Hello World");
cout << s4 << endl;
string s5;
s5.assign("Hello World", 5); // 只赋值前5个字符
cout << s5 << endl;
string s6;
s6.assign(s5);
cout << s6 << endl;
string s7;
s7.assign(5, 'A'); // 赋值5个字符'A'
cout << s7 << endl;
}
-
直接赋值:通过
=
操作符直接给字符串赋值。 -
使用
assign
函数:可以指定字符串的内容、长度或重复字符等方式进行赋值。
三、字符串的拼接
字符串的拼接可以通过+=
运算符或append
函数实现:
cpp复制
#include <iostream>
#include <string>
using namespace std;
void test3()
{
// +=运算符重载
string s1("我");
s1 += "爱玩"; // 拼接字符串
s1 += ':'; // 拼接单字符
string s2 = "王者荣耀";
s1 += s2; // 拼接另一个字符串
cout << s1 << endl;
// 使用append函数
string s11;
s11.append("I lov");
s11.append("e you you", 5); // 拼接前5个字符
cout << s11 << endl;
string s12 = ",you are";
s11.append(s12);
string s13 = ",you are beautiful";
s11.append(s13, 8, 18); // 选取拼接
cout << s11 << endl;
}
-
+=
运算符:可以方便地将字符串、字符或另一个字符串拼接到当前字符串的末尾。 -
append
函数:提供了更灵活的拼接方式,可以指定拼接的内容、长度等。
四、字符串的查找
字符串的查找可以通过find
和rfind
函数实现:
cpp复制
#include <iostream>
#include <string>
using namespace std;
void test4()
{
string s = "abcabc";
size_t pos = 0; // size_t 无符号整数类型,主要用于数组下标
pos = s.find("bc"); // 从左往右查找,返回第一个匹配项的下标
cout << pos << endl;
pos = s.rfind("bc"); // 从右往左查找,返回第一个匹配项的下标
cout << pos << endl;
}
-
find
函数:从左往右查找子串,返回子串第一次出现的位置。 -
rfind
函数:从右往左查找子串,返回子串最后一次出现的位置。
五、字符串的替换
字符串的替换可以通过replace
函数实现:
cpp复制
#include <iostream>
#include <string>
using namespace std;
void test5()
{
string s = "abcdefg";
cout << s << endl;
s.replace(1, 3, "HELLO"); // 将s下标1到3的内容换成"HELLO"
cout << s << endl;
}
-
replace
函数:可以指定起始位置和长度,将指定范围的内容替换为新的字符串。
六、字符串的插入和删除
字符串的插入和删除可以通过insert
和erase
函数实现:
cpp复制
#include <iostream>
#include <string>
using namespace std;
void test8()
{
string s = "0000000";
cout << s << endl;
s.insert(1, "SSSSS"); // 在指定位置插入字符串
cout << s << endl;
s.erase(0, 6); // 删除指定范围的字符
cout << s << endl;
}
-
insert
函数:可以在指定位置插入字符串。 -
erase
函数:可以删除指定范围的字符。
七、字符串的比较
字符串的比较可以通过compare
函数实现:
cpp复制
#include <iostream>
#include <string>
using namespace std;
static void my_print(int a)
{
if (a == 0)
{
cout << "相等" << endl;
}
else if (a == 1)
{
cout << "大于" << endl;
}
else
{
cout << "小于" << endl;
}
}
void test6()
{
string s1 = "ac";
string s2 = "acb"; // 按字典序比较
string s3 = "abc"; // 按字典序比较
string s4 = "ac";
int ret = 0;
ret = s1.compare(s2);
my_print(ret);
ret = s1.compare(s3);
my_print(ret);
ret = s1.compare(s4);
my_print(ret);
}
-
compare
函数:按字典序比较两个字符串,返回值为0表示相等,小于0表示小于,大于0表示大于。
八、字符串的子串提取
字符串的子串提取可以通过substr
函数实现:
cpp复制
#include <iostream>
#include <string>
using namespace std;
void test9()
{
string s = "1760690311@qq.com";
size_t pos = s.find('@');
string username = s.substr(0, pos); // 提取子串
cout << "用户名:" << username << endl;
}
-
substr
函数:可以指定起始位置和长度,提取子串。
九、字符串的字符存取
字符串的字符存取可以通过下标操作符[]
或at
函数实现:
cpp复制
#include <iostream>
#include <string>
using namespace std;
void test7()
{
string s = "0000000";
cout << s << endl;
size_t len = s.size(); // 获取字符串长度
for (int i = 0; i < len; i++)
{
cout << s[i]; // 使用下标操作符访问字符
}
cout << endl;
int i = 0;
while (i < len)
{
cout << s.at(i); // 使用at函数访问字符
i++;
}
cout << endl;
s[1] = 'S'; // 修改字符
s.at(2) = 'N'; // 修改字符
cout << s << endl;
}
-
下标操作符
[]
:可以直接通过下标访问和修改字符。 -
at
函数:提供了更安全的字符访问方式,会进行边界检查。
总结
C++中的字符串操作功能强大且灵活,通过构造、赋值、拼接、查找、替换、插入、删除、比较、子串提取和字符存取等操作,可以满足各种复杂的文本处理需求。掌握这些操作方法,可以让你在C++编程中更加高效地处理字符串相关的任务。
希望本文对你有所帮助,如果有任何问题或建议,欢迎在评论区留言交流。