2017-07-16 7 views
-1

Sorry wenn die Frage schon vorher gestellt wurde aber ich bin neu in C++ und ich bleibe bei unten ...In C++, wie konvertiert man Vektor <paar <char, unsigned>> in eine Zeichenfolge und wieder zurück?

I Funktion haben, die Vektor Paar zurückgibt, wie unten dargestellt ..

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

Jetzt ist mein Ziel ist es oben Vektorpaar in einzelne Zeichenfolge und übergeben Sie die gleiche Zeichenfolge an eine andere Funktion zu konvertieren. In dieser Funktion muss ich wieder die gleiche Zeichenfolge in Vektor> zurückkonvertieren.

Kann mir jemand sagen, wie man über zwei Verfahren vorgeht? Ich schätze Ihre Hilfe in diesem Fall.

Danke,

+1

Eine Zeichenfolge ist Text. Welchen Text erwarten Sie vom Vektor der Paare? –

+1

Es gibt keine Standardmethode dafür. Am einfachsten wäre es, std :: ostringstream zu verwenden, um die Zeichenfolge zu erstellen, und dann std :: istringstream, um sie zu lesen. Sie entscheiden, wie der String formatiert wird und wie mit ungültigen Eingaben umgegangen wird. – Pontifex

+0

Zum Beispiel ist mein Vektorpaar 'c', 17 dann erwarte ich das in 'c-17' umzuwandeln und jeder Vektor wird durch 'Leerzeichen' oder Sonderzeichen getrennt. – user5572904

Antwort

0

-Code unten sollte es tun. Wobei freq Ihre Instanz von vector<pair<char,unsigned>> ist. Sie müssen wahrscheinlich #include <sstream> an der Spitze Ihrer Quelldatei enthalten.

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

    return ss.str(); 
} 
0

es ist einfach Code:

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; 
} 
+0

Die Funktion unsignedToString ist nicht erforderlich. Verwenden Sie einen Stringstream, um eine Zahl an eine Zeichenfolge anzuhängen. Außerdem müssen Sie die "clear" -Methode für den Vektor und den stringstream in der toVector-Funktion nicht aufrufen. Die Instanzen sind bereits "gelöscht". wenn sie gebaut sind. – selbie

0

Dies kann getan werden, ein std::ostringstream mit dem String zu bauen und std::istringstream es auseinander zu analysieren.

#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; 
} 
Verwandte Themen