gpt4 book ai didi

c++ - 删除 std::vector 中与另一个给定 std::string 中的字符匹配的元素

转载 作者:行者123 更新时间:2023-12-01 14:02:56 25 4
gpt4 key购买 nike

如何删除 vector 中的元素 alphabets与字符串 plaintext 中的任何字符匹配?
这是我的尝试:

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

int main()
{
//init
std::vector<std::string> alphabets{ "a", "b", "c", "d", "e", "f", "g", "h", "i", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };
//input
std::string plaintext;
std::cout << "enter plain text: ";
std::cin >> plaintext;

for (std::string::iterator it = plaintext.begin(); it != plaintext.end(); it++)
{
std::vector<std::string>::iterator toErase;
toErase = std::find(alphabets.begin(), alphabets.end(), *it);
if (toErase != alphabets.end())
{
alphabets.erase(toErase);
}
}
}
当我试图编译它时。但我收到了这个错误:
17: note:   'std::__cxx11::basic_string<char>' is not derived from
'const std::istreambuf_iterator<_CharT, _Traits>' { return *__it == _M_value; }
...

203 : 5 : note : candidate : 'template<class _CharT, class _Traits> bool
std::operator==(const std::istreambuf_iterator<_CharT, _Traits>&, const
std::istreambuf_iterator<_CharT, _Traits>&)'
operator==(const istreambuf_iterator<_CharT, _Traits> & __a,
...

最佳答案

*it类型为 char不是 std::string .这就是编译器所提示的。因此你需要传递一个 std::string std::find 如下。

auto toErase = std::find(alphabets.begin(), alphabets.end(), std::string{ *it });
// ^^^^^^^^^^^^^^^^^^
这是 a demo .

另外,请注意以下事项:
  • 您可以更改 std::vector<std::string> alphabetsstd::vector<char> alphabets甚至单个 std::string身为你的alphabets包含/代表char s 作为字符串。在std::string的情况下s(即 alphabets), std::basic_string::find
    使用更合适,而不是更通用std::find首先。
  • 对于 vector 删除,您可以使用 erase–removeidiom , 或者
    从 C++20 开始,使用 std::vector 的非成员函数本身,所以

    std::erase_if .
  • 关于c++ - 删除 std::vector<std::string> 中与另一个给定 std::string 中的字符匹配的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63666273/

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