从矢量中删除具有特定字符串长度的元素
removing elements from vector with specific string length
我有一个以随机字符串作为元素的向量。我正在尝试循环查找长度不是 2 的字符串。如果它们的长度不是 2,则应将其从向量中删除。出于某种原因,我的代码没有删除所有长度不是 2 的字符串。
我尝试单独删除元素,但是当它处于循环中时,它似乎不适用于元素。
这是我的输出:河坳哈哈光盘英 孚WQ唷
并且预期输出不应包含字符串"lol">
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector <string> numbers = {"ho","ao", "tom", "lol", "cd", "ef", "wq", "hello","yo","sup","boi"};
// loop deletes string elements from vector that don't have length of 2
for(int i=0; i < numbers.size(); i++){
if(numbers[i].length() != 2){
numbers.erase(numbers.begin() + i);
}
}
// this makes sure the last element in vector gets deleted
if( numbers[numbers.size() - 1].length() != 2 )
numbers.pop_back();
for(int i=0; i < numbers.size(); i++){
cout << numbers[i] << endl; // prints out vector elements
}
}
当你第一次擦除时(在你擦除"tom"的情况下(,下一个元素的 id 会减少,所以在下一次迭代中你不会检查"lol"的长度。
这不是最好的解决方案,但你可以递减 i if 并且你的代码会起作用。
if(numbers[i].length() != 2){
numbers.erase(numbers.begin() + i);
i--;
}
这是因为在你删除了"tom"之后,索引发生了变化。
在抹去"汤姆"之前
- [0] "嗬"
- [1] "奥">
- [2] "汤姆">
- [3] "哈哈">
- 。
后
- [0] "嗬">
- [1] "奥">
- [2] "哈哈">
- [3] "光盘">
-
。
您可以通过减少 i 来修复它;
if(numbers[i].length() != 2){
numbers.erase(numbers.begin() + i);
i--;
}
或者你可以这样做
for( auto i = numbers.begin(); i != numbers.end(); )
{
if( i->length() != 2 ) i = numbers.erase(i); else ++i;
}
相关文章:
- 将指针作为缓冲区传递到第一个字符串元素
- C++字符串问题-如何访问字符串元素
- 反转由空格分隔的字符串元素将返回比原始字符串更大的字符串
- 将向量元素与字符串元素进行比较,而不初始化向量
- 如何获取数组中字符串元素的字符数?[C++]
- 如何删除在没有STL的队列中存储在数组中的第一个字符串元素
- 比较两个向量的<Structs>字符串元素
- 将字符串元素转换为整数 (C++11)
- 如何使操作员返回引用字符串元素
- 访问字符串元素地址
- 第一个字符串元素的地址产生意外结果
- 在C 中的字符串向量的字符串元素中循环遍历所有字符
- 将字符串元素分配给结构数组中的结构
- C++检查字符串元素的相等性
- 将字符串元素转换为整数C++
- 试图将字符串元素与循环和索引进行比较,但索引不会增加
- C++ - 链表插入排序(字符串元素)
- C++将二维C字符串元素传递到函数中
- 从字符串元素中获取字符串
- 比较列表<string>和向量<string>中的字符串元素