gpt4 book ai didi

c++ - 删除具有特定字符要求的字符串 vector 的元素

转载 作者:行者123 更新时间:2023-11-28 04:45:36 30 4
gpt4 key购买 nike

我目前正在编写一个程序,该程序由一个字符串 vector 组成,其中充满了在相同位置具有特定字母的单词。

例如我的 vector 可能是这样的:

vector<string> v = { "CRYPT", "CYSTS", "WRYLY", "TRYST" };

想法是猜测字母,即在这种情况下为“Y”,程序选择 vector 中的第一个字符串,遍历字符串 vector 并保留 Y 与第一个单词位置相同的单词在 vector 中。在这种情况下,程序会选择“CRYPT”。现在,我需要程序遍历字符串 vector ,并删除与第一个单词“CRYPT”相比在某个额外位置具有该字母重复项的所有单词,同时保留具有相同确切位置的“Y”的单词除了第一个单词的位置外,其他地方没有其他“Y”。因此,在删除任何额外的重复项并将具有该字母的其他单词保留在相同位置后,我需要 vector 的输出看起来像这样。

vector<string> v = { "CRYPT", "TRYST" };

我正在考虑循环遍历 vector 并循环遍历每个字符串以遍历每个字符并检查但是我不能在循环遍历 vector 时从 vector 中删除元素,否则会导致问题。也许对 vector 使用 remove_if 但不确定如何编写谓词。任何帮助表示赞赏!谢谢!

最佳答案

一种方法是定义一个仿函数来评估给定的字符串是否符合复制到结果 vector 的条件。然后将仿函数与 copy_if 一起使用。

类似于:

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

struct do_copy
{
do_copy(char m) : match(m) {}
char match;
size_t pos;
bool found {false};

bool operator()(const std::string& s)
{
if (found)
{
return s.size() > pos &&
s[pos] == match &&
std::count(s.begin(), s.end(), match) == 1;
}

for (int p = 0; p < s.size(); ++p)
{
if (s[p] == match)
{
pos = p;
found = true;
return true;
}
}
return false;
}
};

int main() {
std::vector<std::string> v = { "CRYPT", "CYSTS", "WRYLY", "TRYST" };
std::vector<std::string> r;
char guess = 'Y';

std::copy_if(v.begin(),
v.end(),
std::back_inserter(r),
do_copy(guess));

// Print the result
std::cout << r.size() << " elements found:" << std::endl;
for (auto& s : r)
{
std::cout << s << std::endl;
}

return 0;
}

输出:

2 elements found:
CRYPT
TRYST

关于c++ - 删除具有特定字符要求的字符串 vector 的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49345992/

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