2011-06-19 9 views
1

マップに取り込む必要がある文字列の配列があります。配列の大きさは可変なので、文字列を得るには2次元ベクトルが必要です。私はそれらの上で実行する操作の両方のストレージのフォーマットが必要です。ここに私のattemp ..(編集:)実行時のエラーがあります。文字列をマップから2次元ベクトルに文字変換する

#include "stdafx.h" 
#include<iostream> 
#include<string> 
#include<fstream> 
#include<map> 
#include<vector> 
#include<algorithm> 
#include<iterator> 

#define rep(i,a,b) for(int i=(a);i<=(b);i++) 

using namespace std; 
std::map<int,string>col; 
std::map<int,string>row; 
std::map<int,string>::iterator p;  
std::map<int,string>d1; 
std::map<int,string>d2; 

int main() 
{ 
    int i=0,r=0; 
    string s; 

    ifstream ip; 
    ip.open("a.in"); 

    ofstream op; 
    op.open("a_out.in"); 

    ip>>s; 

    const int c= s.length(); 
    ip.seekg(0,std::ios::beg); 

    do { 
     ip>>s;row.insert(make_pair(r,s)); 
     r++; 
    }while(s.length()==c); 

    p=row.find(--r); 
    row.erase(p); 
    p = row.begin(); 

    while(p!=row.end()) 
    { 
     cout<<(p->first)<<","<<(p->second)<<"\n"; 
     p++; 
    } 

    vector<vector<char>>matrix(r,vector<char>(c)); 

    rep(i,0,r){ 
     int k=0;rep(j,0,c)(p->second).copy(&matrix[i][j],1,k++); 
    } 

    rep(i,0,r) 
     rep(j,0,c) 
      cout<<matrix[i][j]; 
return 0; 
} 
+0

コードを書式設定してください。 –

+0

エラーが発生した場合は、エラーを送信してください。 –

+0

私はconfusion..i意味実行time..mustのために非常に残念ですが、私の心の外にありますあなたのニーズを満たしています! –

答えて

2

文字列をベクターにコピーする前に、地図を印刷した後に問題が発生するようです。 (pは(row.endするように設定した))

while(p!=row.end()) 
{ 
    cout<<(p->first)<<","<<(p->second)<<"\n"; 
    p++; 
} 
p = row.begin(); // Must reset iterator! 

vector<vector<char>>matrix(r,vector<char>(c)); 
rep(i,0,r){ 
    int k=0; 
    rep(j,0,c)(p->second).copy(&matrix[i][j],1,k++); 
    ++p; // Must advance the iterator. 
} 

無効なイテレータを参照ループの二重にネストされたのように、イテレータdereferencableない設定されたマップを/修正する必要があります:あなたは二つのことを必要とします。

編集: はまた、あなたはすべての文字列が同じ長さであると仮定することができない限り、あなたは別の手法を検討するかもしれません。 const int c = s.length()を使用すると、map<int,string>vector<char>には、ファイル内のすべての文字列の長さがまったく同じ長さになると伝えられます。 2番目の文字列が最初の文字列よりも短い場合は、存在しない文字列の文字にアクセスしようとします。それはときにそれを実際にはしません、それはc文字が含まれていると考えているので注意してください

rep(j,0,c) (p->second).copy(&matrix[i][j],1,k++) 

は失敗します。

+0

ありがとう!その作業...私は後で欠けているP + +を考え出しましたが、リセットイテレータは私が逃したものでした。 :) –

+0

は、私はこの質問への公式な答えとして、それを選択するために、答えの近くにあるチェックボックスをクリックして、それが..私はこの答えはあなたの問題を解決した場合は、特定の時点件まですべての文字列が最初 –

+0

@Aseemと同じ長さを持って知って取り扱わました。 – karlphillip

関連する問題