gpt4 book ai didi

c++ - 如何从仅包含字母的 vector 字符串中删除?我的代码没有删除我需要删除的每个字符串

转载 作者:太空宇宙 更新时间:2023-11-04 15:42:27 25 4
gpt4 key购买 nike

在我的应用程序中,我有一个字符串 vector 。在这个 vector 中,我有各种字符串,并且想从我的 vector 字符串中删除只包含字母的字符串。我写了这样的东西:

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

bool lettersOnly(std::string text)
{
for(int i=0; i<text.length(); i++)
{
if(!isalpha(text.at(i)))
return false;
}
return true;
}

void removeWordsWithLettersOnly(std::vector<std::string> &vec)
{
for(int i=0; i<vec.size(); i++)
{
std::string text = vec.at(i);
if(lettersOnly(text))
vec.erase(remove(vec.begin(), vec.end(), text), vec.end());
}
}

int main()
{
vector<string> vec;

vec.push_back("Someletters");
vec.push_back("Bomeletters");
vec.push_back("someletters");
vec.push_back("123456543");
vec.push_back("098765");
vec.push_back("someletters");
vec.push_back("someletters");
vec.push_back("someletters234567");

for(int i=0; i<vec.size(); i++)
cout << vec[i] << "\n";

cout << "\n\n\n";
removeWordsWithLettersOnly(vec);

for(int i=0; i<vec.size(); i++)
cout << vec[i] << "\n";

return 0;

}

问题是,无论我在 vector 上使用我的方法,它都不会删除它应该删除的每个字符串。对于我上面的示例代码,它不会删除字符串 Bomeletters。这是为什么?这个字符串只有字母,所以应该被删除。有什么想法吗?

最佳答案

您的循环移除了您脚下的元素,使事情变得复杂。

您可以像这样简单地将 std::remove_if 与您的谓词一起使用:

void removeWordsWithLettersOnly(std::vector<std::string> &vec)
{
vec.erase(remove_if(vec.begin(), vec.end(), lettersOnly), vec.end());
}

有了它,您的代码就会按预期工作。

请注意,您的 lettersOnly 谓词正在为传递给它的每个字符串制作不必要的拷贝。您可以通过将其参数改为 const 引用来解决此问题:

bool lettersOnly(const std::string& text) { /* as before */ }

关于c++ - 如何从仅包含字母的 vector 字符串中删除?我的代码没有删除我需要删除的每个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21073831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com