Replace multiple spaces with one space in a string(用字符串中的一个空格替换多个空格)
问题描述
我将如何在 c++
中执行类似于以下代码的操作:
How would I do something in c++
similar to the following code:
//Lang: Java
string.replaceAll(" ", " ");
此代码片段将用一个空格替换字符串中的所有多个空格.
This code-snippet would replace all multiple spaces in a string with a single space.
推荐答案
bool BothAreSpaces(char lhs, char rhs) { return (lhs == rhs) && (lhs == ' '); }
std::string::iterator new_end = std::unique(str.begin(), str.end(), BothAreSpaces);
str.erase(new_end, str.end());
这是如何工作的.std::unique
有两种形式.第一种形式通过一个范围并删除相邻的重复项.所以字符串abbaaabbbb"变成了abab".我使用的第二种形式采用一个谓词,该谓词应该包含两个元素,如果它们被认为是重复的,则返回 true.我编写的函数 BothAreSpaces
用于此目的.它确切地确定了它的名称所暗示的含义,即它的两个参数都是空格.所以当与 std::unique
结合使用时,重复的相邻空格会被删除.
How this works. The std::unique
has two forms. The first form goes through a range and removes adjacent duplicates. So the string "abbaaabbbb" becomes "abab". The second form, which I used, takes a predicate which should take two elements and return true if they should be considered duplicates. The function I wrote, BothAreSpaces
, serves this purpose. It determines exactly what it's name implies, that both of it's parameters are spaces. So when combined with std::unique
, duplicate adjacent spaces are removed.
就像 std::remove
和remove_if
, std::unique
实际上并没有使容器变小,它只是将末尾的元素移动到更接近开头的位置.它返回一个迭代器到新的范围结束,因此您可以使用它来调用 erase
函数,是string类的成员函数.
Just like std::remove
and remove_if
, std::unique
doesn't actually make the container smaller, it just moves elements at the end closer to the beginning. It returns an iterator to the new end of range so you can use that to call the erase
function, which is a member function of the string class.
分解它,擦除函数需要两个参数,一个开始和一个结束迭代器,用于擦除范围.对于它的第一个参数,我传递了 std::unique
的返回值,因为这是我想要开始擦除的地方.对于它的第二个参数,我正在传递字符串的结束迭代器.
Breaking it down, the erase function takes two parameters, a begin and an end iterator for a range to erase. For it's first parameter I'm passing the return value of std::unique
, because that's where I want to start erasing. For it's second parameter, I am passing the string's end iterator.
这篇关于用字符串中的一个空格替换多个空格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:用字符串中的一个空格替换多个空格
基础教程推荐
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- Windows Media Foundation 录制音频 2021-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- 从 std::cin 读取密码 2021-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01