C++ STL 玩转 toupper, tolower 和字符串处理

4星 · 超过85%的资源 需积分: 9 2 下载量 185 浏览量 更新于2024-07-31 收藏 138KB DOC 举报
"看看人家是怎样去玩STL" 在C++编程中,STL(Standard Template Library,标准模板库)是一组强大的工具,它提供了容器、迭代器、算法和函数对象等,极大地提高了代码的效率和可重用性。本文将探讨如何巧妙地使用STL中的某些功能,如`toupper`和`tolower`转换,字符串修剪(trim),以及使用`erase`和`remove_if`来删除特定字符。 1. **`toupper`和`tolower`转换** 在C++的`<cctype>`库中,`toupper`和`tolower`函数用于将字符转换为大写或小写。然而,`std::string`类本身并不直接提供`to_upper`或`to_lower`方法。但通过结合STL的`transform`算法,我们可以轻松实现字符串中所有字符的大小写转换。例如,下面的代码片段展示了如何使用`transform`和`toupper`将字符串`s`转换为大写和小写: ```cpp string s("heLLo"); transform(s.begin(), s.end(), s.begin(), ::toupper); cout << s << endl; transform(s.begin(), s.end(), s.begin(), ::tolower); cout << s << endl; ``` 2. **字符串修剪(trim)** C++标准库并没有内置的`trim`函数来去除字符串两侧的空白字符。但是,我们可以利用STL的`find_first_not_of`和`find_last_not_of`函数来自定义实现。这两个函数可以找到字符串中第一个不包含指定字符的位置和最后一个不包含指定字符的位置。下面的代码展示了如何去除字符串`s`的前导和尾随空白: ```cpp string s(" hello "); s.erase(0, s.find_first_not_of("\n")); // 去除前导空白 s.erase(s.find_last_not_of(' ') + 1); // 去除尾随空白 cout << s << endl; ``` 3. **使用`erase`和`remove_if`删除特定字符** 虽然`std::string`的`erase`函数可以删除连续的字符序列,但要删除所有出现的特定字符,我们需要结合`remove_if`算法。`remove_if`会将满足条件的元素移动到序列末尾,但不会真正删除它们。因此,我们需要后续调用`erase`来完成实际的删除操作。以下代码片段展示了如何从字符串`s`中删除所有逗号: ```cpp string s("hello,world.saybye"); s.erase(remove_if(s.begin(), s.end(), b'.'), s.end()); // 删除所有句点(.) cout << s << endl; ``` STL提供的强大功能和灵活性使得处理字符串和其他数据结构变得非常高效。通过熟练掌握这些技巧,开发者可以编写出更加简洁且高效的C++代码。无论是大小写转换、字符串修剪还是删除特定字符,STL都提供了优雅的解决方案。