从1D阵列中删除多个引用
Removing multiple occurrences from a 1D Array
我编写了一个函数,该函数将从1D数组中删除多次出现的字母。但是,如果有两个相同的字母一个接一个,while循环会在索引增加到数组的下一个位置时错过第二个字母。
void removeAllOccurrences(char text[], char letter)
{
int index(0);
while (text[index] != EOT)
{
if ((text[index] == letter) || (text[index] == toupper(letter)))
{
text[index] = text[index + 1];
}
++index;
}
}
如果数组存储单词[a][b][c][c][EOT],并且我想删除字母c。输出将是abcEOT,但我希望删除所有出现的c。所以输出应该是abEOT。
您可以使用两个索引来完成此操作。第一个迭代数组,第二个指向存储字符的位置。
如果不应删除当前字符,则只能增加第二个索引。
void removeAllOccurrences(char text[], char letter)
{
int index(0);
int indexOut(0);
while (text[index] != EOT)
{
if ((text[index] != letter) && (text[index] != toupper(letter)))
{
text[indexOut] = text[index];
++indexOut;
}
++index;
}
// we want to keep EOT ?
text[indexOut] = EOT;
}
我从其他事件中知道这个问题,比如试图从集合中删除对象时:
我会倒退!:-)
===>从文本开始。GetUpperBound(0),然后将索引减少1,直到达到0。
您可以使用std::remove_if
:
void removeAllOccurrences(char text[], char letter)
{
auto it = std::remove_if(text, text + strlen(text), [letter](char c)
{ return toupper(c) == toupper(letter) ;});
*it = ' ';
}
实例
相关文章:
- 移动赋值运算符;尝试引用已删除的函数.我该如何解决这个问题?
- C++ 尝试在不存在的构造函数中引用已删除的函数(使用 rapidJson)
- 为什么通过 vector<reference_wrapper> 的元素删除引用的值<T>不会使向量无效?
- 在引用初始化中使用已删除的复制构造函数进行复制初始化
- CMake 引用我在 ~/bin 中创建的随机 shell 脚本(即使我删除了它)?
- 删除对象(具有不同类型)的引用时会发生什么情况?
- 使用函数引用指向节点的指针删除链表中的节点?
- unique_ptr实现接口时对已删除函数的引用
- 无法引用该函数" std:: variant <_Types...> operator =",因为此函数已被删除
- 从尝试引用已删除函数的矢量 C++ 中删除对象
- unique_ptr,您引用的是已删除的函数
- 试图引用已删除函数数组的相等运算符
- 错误:在类型 "blah blah" 的绑定引用中删除限定符以初始化"some other blah blah"
- 使用 future 时获取 C2280(尝试引用已删除的函数)
- 删除通过取消引用新对象初始化的对象
- C++引用已删除函数错误
- 是否可以删除取消引用的指针
- 尝试引用已删除的函数
- 如何在C++上使用对象引用删除对象
- BOOST共享指针导致冗余引用删除