C++ String类常用——元素删除与添加

删除选定位置的字符

在 C++ 的 string 类中,要删除一个字符串中的特定字符,可以使用以下方法之一:

方法一:使用 erase 函数

可以使用 erase 函数来删除 string 中的一个或多个字符。具体来说,可以指定要删除的起始位置和要删除的字符数目。

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "Hello, World!";

// 删除字符串中的一个元素
str.erase(7, 1); // 从位置7开始删除1个字符

cout << str << endl; // 输出结果为 "Hello World!"

return 0;
}

方法二:使用 substr 函数拼接子字符串

另一种方法是使用 substr 函数来拼接字符串中要保留的部分,从而实现删除特定字符的效果。

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "Hello, World!";

// 删除字符串中的一个元素
str = str.substr(0, 7) + str.substr(8); // 保留位置0到6的字符和位置8之后的字符

cout << str << endl; // 输出结果为 "Hello World!"

return 0;
}

删除特定位置字符

在 C++ 中,删除第一个和最后一个元素有一些特殊的方法,具体取决于所使用的容器类型。以下是针对不同容器的常见方法:

删除最后一个元素:

  • 使用 pop_back 函数来删除最后一个字符。
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "Hello, World!";
str.pop_back();
cout << str << endl; // 输出结果为 "Hello, World"

return 0;
}

删除第一个元素:

  • 使用 erase 函数结合迭代器来删除第一个元素。
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "Hello, World!";
str.erase(str.begin());
cout << str << endl; // 输出结果为 "ello, World!"
return 0;
}
  • 使用substr 函数删除第一个字符的示例:
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "Hello, World!";
str = str.substr(1); // 删除第一个字符,注意赋值
cout << str << endl; // 输出结果为 "ello, World!"

return 0;
}

在这个示例中,我们使用 substr 函数来截取字符串,从第二个字符开始直到末尾,实现了删除第一个字符的效果。这种方法简单直观,适合用于删除第一个元素的情况。

删除选定字符

使用 removestring::erase 的组合,这种方法通常用于删除特定字符。

以下是使用 removestring::erase 的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string str = "Hello, World!";

// 删除字符串中的一个元素(逗号)
str.erase(remove(str.begin(), str.end(), ','), str.end());

cout << str << endl; // 输出结果为 "Hello World!"

return 0;
}

在这个例子中,remove 函数会将要删除的字符移动到字符串的末尾,然后通过 string::erase 函数来实际删除这些字符。这种方法在需要删除多个特定字符时特别有用。

附录

remove介绍

在 C++ 中,remove 是一个算法函数,定义在 <algorithm> 头文件中。remove 并不会真正删除元素,而是将符合条件的元素移到容器的末尾,并返回一个指向新的逻辑结尾的迭代器。这样做是为了保持容器的连续性。

remove 函数通常与容器的修改函数(例如 erase)结合使用,以实际删除元素。这个组合通常用于从容器中删除特定值或元素。

语法:

1
2
template< class ForwardIt, class T >
ForwardIt remove(ForwardIt first, ForwardIt last, const T& value);

参数:

  • first:指向容器中要处理的起始位置的迭代器。
  • last:指向容器中要处理的结束位置的迭代器。
  • value:要移除的值。

返回值:

remove 返回一个指向新的逻辑结尾的迭代器,实际的元素并未删除。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string str = ",,,,,Hello, World!,,,,";
cout << *remove(str.begin(), str.end(), ',') << endl;
cout << str << endl;
return 0;
}
//输出:
/*
W
Hello World!World!,,,,
*/

在这个示例中,可以看出remove返回的是末尾迭代器,也对str做了修改但是没有删除,相当于逐一向前推进一位。

substr介绍

在 C++ 的标准库中,substrstring 类的成员函数,用于从字符串中提取子字符串。这个函数允许你指定起始位置和要提取的字符数,以获取原始字符串的子串。

语法:

1
string substr(size_t pos = 0, size_t len = npos) const;

参数:

  • pos:子字符串的起始位置。
  • len:要提取的字符数。

返回值:

  • 返回一个新的 string 对象,包含从原始字符串中提取的子串。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "Hello, World!";

string sub1 = str.substr(7); // 从位置7开始提取到末尾
string sub2 = str.substr(0, 5); // 从位置0开始提取5个字符

cout << sub1 << endl; // 输出结果为 "World!"
cout << sub2 << endl; // 输出结果为 "Hello"

return 0;
}

在这个示例中,substr 函数被用来从字符串中提取子串。通过指定起始位置和要提取的字符数,可以获得原始字符串的子串。substr 函数返回一个新的 string 对象,包含提取的子串内容。