我只需要找到二维矢量中的字母并将它们复制到一维矢量中。例如,向量可以包含:
3 4 5
A B
A C
A B
B C
1 C 3
然后,新的向量将包含:
A B C
不应重复这些字母。 这是一个更大的项目的一部分,我陷入了这一部分。
答案 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