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

时间:2016-05-06 03:42:13

标签: c++ vector

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

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

然后,新的向量将包含:

A    B   C

不应重复这些字母。 这是一个更大的项目的一部分,我陷入了这一部分。

3 个答案:

答案 0 :(得分:3)

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

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;

答案 1 :(得分:0)

你使用错误的容器来写信。在集合上更改向量,您将获得正确的行为:

std::set<string> Letters;

答案 2 :(得分:0)

所以我有这两个载体:

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