很抱歉,如果之前已经问过这个问题,但我是C ++的新手,我坚持下面......
我有返回对矢量的函数,如下所示。
vector< pair<char, unsigned> > freq = create_freq(s); //S is string
现在我的目标是将上面的矢量对转换为单个字符串,并将相同的字符串传递给另一个函数。 在该函数中,我再次将相同的字符串转换回vector&gt;。
有人可以告诉我如何做以上两个程序吗?我很感谢你在这方面的帮助。
谢谢,
答案 0 :(得分:0)
下面的代码应该这样做。 freq
是vector<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;
}