📜  如何将字符串推送的每个元素转换为 C++ 中的集合? - C++ (1)

📅  最后修改于: 2023-12-03 15:09:07.134000             🧑  作者: Mango

如何将字符串推送的每个元素转换为 C++ 中的集合?

在C++中,将字符串推送的每个元素转换为集合(如vector、set、map等)是非常常见的需求,本文将介绍如何实现该功能。

将字符串拆分为单个字符

首先,我们需要将字符串拆分为单个字符,这个过程可以使用C++中的STL库中的字符串流(stringstream)来完成,具体代码如下:

#include <iostream>
#include <string>
#include <sstream>
#include <vector>

using namespace std;

vector<char> splitString(const string& str) {
    vector<char> chars;
    stringstream ss(str);
    char c;
    while (ss >> c) {
        chars.push_back(c);
    }
    return chars;
}

int main() {
    string str = "hello world";
    vector<char> chars = splitString(str);
    for (char c : chars) {
        cout << c << endl;
    }
    return 0;
}

上述代码中,我们创建了一个名为splitString的函数,它接收一个字符串参数str,并使用字符串流(stringstream)将其拆分为单个字符,然后将单个字符存储在vector中并返回。在主函数中,我们测试了splitString函数的功能,并将结果打印在控制台上。

将单个元素存储在集合中

接下来,我们将使用上一步拆分出的单个字符来创建一个集合。具体来说,我们可以使用vector、set或map集合来存储字符,这取决于我们需要的功能。例如,如果我们只需要存储不重复的字符集合,则使用set;如果我们需要存储每个字符出现的次数,则使用map。下面是一些示例代码:

存储在vector中
string str = "hello world";
vector<char> chars = splitString(str);
vector<char> v;
for (char c : chars) {
    if (c != ' ') {
        v.push_back(c);
    }
}
for (char c : v) {
    cout << c << endl;
}

上述代码中,我们使用splitString函数将字符串拆分为单个字符,并使用vector存储这些字符。然后,我们遍历vector,将其中的空格字符过滤掉,最后将剩余的字符存储在一个新的vector中,并打印出来。

存储在set中
string str = "hello world";
vector<char> chars = splitString(str);
set<char> s;
for (char c : chars) {
    if (c != ' ') {
        s.insert(c);
    }
}
for (char c : s) {
    cout << c << endl;
}

上述代码中,我们使用splitString函数将字符串拆分为单个字符,并使用set存储这些字符。然后,我们遍历vector,将其中的空格字符过滤掉,并将剩余的字符插入到set中。由于set是自动去重的,所以我们无需担心插入重复元素的问题。最后,我们遍历set并打印出来。

存储在map中
string str = "hello world";
vector<char> chars = splitString(str);
map<char, int> m;
for (char c : chars) {
    if (c != ' ') {
        m[c]++;
    }
}
for (auto& p : m) {
    cout << p.first << " occurs " << p.second << " time(s)." << endl;
}

上述代码中,我们使用splitString函数将字符串拆分为单个字符,并使用map<char, int>存储这些字符及其出现的次数。然后,我们遍历vector,将其中的空格字符过滤掉,并在map<char, int>中将剩余的字符的出现次数加1。最后,我们遍历map<char, int>并打印出每个字符及其出现次数。

总结

本文介绍了如何将字符串推送的每个元素转换为C++中的集合。具体来说,我们首先使用字符串流(stringstream)将字符串拆分为单个字符,然后使用vector、set或map等集合存储这些字符,并按要求进行操作。希望本文能够帮助C++程序员更好地处理字符串集合。