在C ++中,如何转换向量&lt; pair <char,unsigned =“”>&gt;变成一个字符串又回来了?

时间:2017-07-16 17:44:09

标签: c++ string vector

很抱歉,如果之前已经问过这个问题,但我是C ++的新手,我坚持下面......

我有返回对矢量的函数,如下所示。

    vector< pair<char, unsigned> > freq = create_freq(s); //S is string 

现在我的目标是将上面的矢量对转换为单个字符串,并将相同的字符串传递给另一个函数。 在该函数中,我再次将相同的字符串转换回vector&gt;。

有人可以告诉我如何做以上两个程序吗?我很感谢你在这方面的帮助。

谢谢,

3 个答案:

答案 0 :(得分:0)

下面的代码应该这样做。 freqvector<pair<char,unsigned>>的实例。您可能需要在源文件的顶部添加#include <sstream>

string toString(vector<pair<char, unsigned>> &freq)
{
     ostringstream ss;
     for (auto &p : freq)
     {
         ss << p.first << "-" << p.second;
     }

     return ss.str();
 }

答案 1 :(得分:0)

这是简单的代码:

string unsignedToString(unsigned a){
    string val = "";
    do{
        val = (char)((a%10) + '0') + val;
        a /= 10;
    }while(a > 0);
    return val;
}


string toString(vector < pair < char , unsigned> > vec)
{
    string st = "";
    st += unsignedToString(vec.size());

    for(int i = 0 ; i < vec.size() ; ++i){
        pair < char , unsigned > p = vec[i];
        st += " ";
        st += p.first;
        st += " ";
        st += unsignedToString(p.second);
    }

    return st;

}

vector < pair < char , unsigned> > toVector(string st)
{
    vector < pair < char , unsigned> > vec;
    vec.clear();
    stringstream ss;
    ss.clear();
    ss << st;
    int sz;
    ss >> sz;
    for(int i = 0 ; i < sz ; ++i){
        char ch;
        unsigned ua;
        ss >> ch >> ua;
        vec.push_back(make_pair(ch , ua));
    }

    return vec;
}

答案 2 :(得分:0)

这可以使用std::ostringstream来构建字符串,std::istringstream来解析它。

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

// Make the code cleaner. Pick type aliases that make sense to you.
using Freq = std::pair<char, unsigned>;
using FreqVector = std::vector<Freq>;

std::string freq_to_string(const FreqVector &freq)
{
    std::ostringstream oss;
    for (auto &pr : freq) {
        oss << pr.first << '-' << pr.second << ' ';
    }
    return oss.str();
}

FreqVector string_to_freq(const std::string &str)
{
    FreqVector result;
    std::istringstream iss(str);
    char ch, dash;
    unsigned us;
    while (iss >> ch >> dash >> us) {
        result.emplace_back(ch, us);
    }
    return result;
}