C++ string中的erase函数

本文介绍了一个简单的C++程序,该程序能够从输入的字符串中移除所有非字母字符,并将所有小写字母转换为大写字母。通过使用标准库函数如`isalpha`和`toupper`,以及`string::erase`方法实现了这一功能。

编写函数去除字符串中包含的非字母字符(不包括空格),并将小写字母转换成大写字母。

注意,不在函数中输出。输入输出应在主函数中进行。


输入格式:

待转换的字符串,字符串间会包含空格,长度不超过200。


输出格式:

转换后的字符串


输入样例:

happy new year!


输出样例:

HAPPY NEW YEAR

时间限制:500ms内存限制:32000kb

/*
 * 自己写也很简单- - 但作为码农。。熟悉使用库函数还是挺重要的。。有剑在手还是得会用的
 * 用的string 的 erase函数
*/
#include "iostream"
#include "algorithm"
#include "string"
using namespace std;
int main() {
	string s;
	getline(cin, s);
	for (int i = 0; i<s.length(); ) {
		if ((!isalpha(s[i])) && (s[i] != ' ')) {
			 s.erase(i,1);
		}
		else {
			if (islower(s[i])) {
				s[i] = toupper(s[i]);
			}
			i++;
		}
	}
	cout << s << endl;
	return 0;
}


C++ 中的 `std::string` 类提供了 `erase` 方法,用于从字符串中删除字符。该方法具有多种重载形式,能够灵活地根据位置和数量删除字符。 ### 删除指定位置和数量的字符 `erase` 方法的一个常见用法是通过指定起始位置和要删除的字符数量来移除字符串的一部分。其语法如下: ```cpp string& erase(size_t pos = 0, size_t len = npos); ``` 该方法从位置 `pos` 开始,删除最多 `len` 个字符。如果 `len` 超出字符串长度,则删除从 `pos` 开始的所有字符[^1]。例如: ```cpp #include <iostream> #include <string> int main() { std::string str = "Hello, World!"; str.erase(7, 6); // 删除从位置7开始的6个字符,即 "World" std::cout << str << std::endl; // 输出: Hello, ! return 0; } ``` ### 删除特定迭代器指向的字符 `erase` 方法还支持使用迭代器指定要删除的字符范围。其语法如下: ```cpp iterator erase(const_iterator first, const_iterator last); ``` 该方法删除从 `first` 到 `last` 之间的所有字符,并返回指向被删除字符之后的字符的迭代器[^1]。例如: ```cpp #include <iostream> #include <string> int main() { std::string str = "Hello, World!"; str.erase(str.begin() + 7, str.begin() + 13); // 删除从索引7到12的字符,即 "World!" std::cout << str << std::endl; // 输出: Hello, return 0; } ``` ### 删除单个字符 如果仅需删除一个字符,可以结合 `erase` 和 `begin()` 或 `end()` 使用。例如,删除字符串中索引为5的字符: ```cpp #include <iostream> #include <string> int main() { std::string str = "Hello, World!"; if (str.size() > 5) { str.erase(str.begin() + 5); // 删除索引为5的字符,即 "," } std::cout << str << std::endl; // 输出: Hello World! return 0; } ``` ### 注意事项 - 在使用 `erase` 时,必须确保传入的位置和长度不会超出字符串的边界,否则会导致未定义行为。 - 如果删除操作频繁进行,建议使用 `std::string` 的 `erase` 方法结合 `std::string::npos` 或迭代器范围,以提高效率和可读性。 - `erase` 操作可能会导致字符串内部内存重新分配,因此在操作后,指向字符串的指针、引用或迭代器可能失效。 ### 总结 `std::string::erase` 提供了多种方式来删除字符串中的字符,包括基于位置和长度的删除以及基于迭代器范围的删除。在使用时,应特别注意边界条件,以避免未定义行为[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值