2011-06-19 75 views
1

我有一個字符串數組需要被帶入地圖。由於數組的大小是可變的,我需要一個2D矢量來獲得字符串的字符串。我需要兩種存儲格式來執行我在其上執行的操作。這是我的attemptp..gives錯誤(編輯:)運行時間。將字符串從地圖轉換爲2D地圖字符方式

#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

我很抱歉的困惑..我的意思是跑時間..必須在輸入時出現在我的腦海裏..反正有錯誤 表達式:map/set迭代器不可取消 –

回答

2

在將字符串複製到矢量中之前,它看起來像在打印出地圖之後出現問題。你需要兩樣東西:

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,如雙重嵌套的for循環您引用了無效的迭代器(p設定爲row.end())。

編輯: 此外,除非您可以假定所有字符串長度相同,否則您可能會考慮採用不同的技術。當您使用const int c = s.length()時,您告訴map<int,string>vector<char>文件中EVERY字符串的長度是完全相同的長度。如果第二個字符串比第一個字符串短,您將嘗試訪問字符串中不存在的字符!因爲它認爲它有c字符,當它實際上不會注意

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

將失敗。

+0

謝謝!它的工作..我後來想出了丟失的p ++,但重置迭代器是我錯過了。 :) –

+0

我得到了處理..我知道所有字符串達到一定的點具有相同的長度,第一 –

+0

@Aseem如果這個答案解決了您的問題,請點擊答案附近的複選框以選擇它作爲這個問題的正式答案。 – karlphillip

相關問題