2016-11-28 7 views
0

として多次元ベクトルは、私がOmnet ++手動で任意のものを見つけられませんでした、文字列としてomnetpp.iniからの入力として1つのベクトルを持っているし、下記のとおりブール値として使用されるようにOmnet ++:入力

//omnetpp.ini 
**.setGate = "true false false false true false false" 

//mynetwork.cc 
bool MyQueue::gateState() 
{ 
// reading input from omnetpp.ini as string 
const char *vstr = par("setGate").stringValue(); 
std::vector<std::string> v = cStringTokenizer(vstr).asVector(); 

//Converting String Vector as bool Vector 
bool mygate[6]; 

for (int x = 6; x>=0; x--){ 
    if (v[x] == "true") 
     mygate[x] = true; 
    else mygate[x] = false; 
... 
    }; 

を管理しますそれはすべてのアイデアはどのように私はこのような問題を克服することができます

//omnetpp.ini 
**.setGate = "true false false false true false false, 
       false false false false false false false, 
       true false false false true false false" 

、私は以下のとおり多次元の入力を持つことができますか?

答えて

1

多次元配列を読み取る簡単な方法はありません。そして、おそらくcStringTokenizerを使用することが最善の考えです。私は、その配列を読み取るために、次のコードを提案する:

bool gatesBool[10][10]; // let's assume these dimensions 

const char * tableStr = par("setGate").stringValue(); 
cStringTokenizer table(tableStr, ","); // a comma separates rows 
int x = 0; 
while (table.hasMoreTokens()) { 
    cStringTokenizer row(table.nextToken(), " "); // a space separates elements 
    int y = 0; 
    while (row.hasMoreTokens()) { 
     if (strcmp(row.nextToken(), "true") == 0) { 
      gatesBool[x][y] = true; 
     } else { 
      gatesBool[x][y] = false; 
     } 
     y++; 
    } 
    x++; 
} 

注:

  1. あなたは事前に、配列の大きさを知っている必要があります。

    **.setGate = "true true false,\ 
           false false false" 
    
:あなたはたとえば、それぞれの行の末尾が、最後にバックスラッシュを置くべき多くの行を使用して omnetpp.iniで文字列パラメータを書き込むには