在C++中,只将一个向量中的字母复制到另一个向量

Copying only the letters in a vector to another vector in C++

本文关键字:向量 复制 另一个 一个 C++      更新时间:2023-10-16

我只需要在二维向量中找到字母,并将它们复制到一维向量中。例如,矢量可能包含:

3    4    5
A    B 
A    C
A    B
B    C
1    C    3

然后,新矢量将包含:

A    B   C

这些信不应该重复。这是一个更大项目的一部分,我被困在这个部分。

您可以使用数组跟踪您看到的字母:

bool seen[26] = { false };
for (const auto& v : v2d)
    for (const auto& c : v)
        if ('A' <= c && c <= 'Z')
            seen[c - 'A'] = true;
std::string result;
for (char c = 'A'; c <= 'Z'; ++c)
    if (seen[c - 'A']) result += c;

您使用了错误的Letters容器。改变你在片场的矢量,你会得到正确的行为:

std::set<string> Letters;

所以我有这两个向量:

vector<vector<string>> gateInputs; //2D vector with data
vector<string> Letters; // Vector where I'll store only the letters

我被告知要使用isalpha,但它只适用于char,并且我的矢量类型为string,所以我使用了以下函数:

bool all_alpha(const std::string& str)
{
    for (std::size_t i = 0; i < str.size(); ++i)
    if (!std::isalpha(str[i])) return false;
}

然后我调用该函数,只存储矢量Letters:中的字母

for (int i = 0; i <gateInputs.size(); i++)
    {
    for (int j = 0; j<gateInputs[i].size(); j++)
    {
        if (all_alpha(gateInputs[i][j]))
        {
            string m = gateInputs[i][j];
            Letters.push_back(m);
        }
    }
}

它奏效了。现在矢量Letters包含以下内容:

A   B  A  C  A  B  B  C  C

然后我只需要对矢量进行排序并删除重复项:

// Sort letters in vector
sort(Letters.begin(), Letters.end());
// Erase duplicates
Letters.erase(unique(Letters.begin(), Letters.end()), Letters.end());

完成了!阵列现在包含:

A    B    C