2017-07-16 4 views
-1

申し訳ありませんが、質問は既に以前に尋ねられましたが、私はC++を新しくしています。C++では、ベクトル<pair <char、unsigned>を文字列に変換して元に戻す方法はありますか?

私は、以下のようにペアのベクトルを返す関数を持っている...

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

は今、私の目標は、単一の文字列に、ベクトルペアの上に変換することで、別の関数に同じ文字列を渡します。 その関数では、再び同じ文字列をvector>に変換する必要があります。

上記の2つの手順を行う方法を教えてもらえますか?これであなたの助けに感謝します。

ありがとう、

+1

文字列はテキストです。あなたはペアのベクトルからどんなテキストを期待していますか? –

+1

標準的な方法はありません。最も簡単なのはstd :: ostringstreamを使って文字列を作成し、次にstd :: istringstreamを使ってそれを読むことです。文字列のフォーマット方法と無効な入力の処理方法を決定します。 – Pontifex

+0

たとえば、私のベクトルペアは 'c'、17は 'c-17'に変換され、各ベクトルは 'space'または特殊文字で区切られます。 – user5572904

答えて

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(); 
} 
0

それは簡単なコードです:これはそれを離れて解析する文字列とstd::istringstreamを構築するためにstd::ostringstreamを使用して行うことができ

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

unsignedToString関数は不要です。文字列に数字を追加するには、文字列ストリームを使用してください。また、toVector関数のベクトルと文字列ストリームで "clear"メソッドを呼び出す必要はありません。インスタンスはすでに「クリア」されています。それらが構築されるとき。 – selbie

0

#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; 
} 
関連する問題