Omnit++:多维向量作为输入
Omnet++: multidimensional vector as input
我设法从 omnetpp.ini 中将一个向量作为字符串输入并用作 bool,如下所示,
//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;
...
};
我在 Omnet++ 手册中没有找到任何允许我进行多维输入的东西,
//omnetpp.ini
**.setGate = "true false false false true false false,
false false false false false false false,
true false false false true false false"
我该如何克服这样的问题?
没有读取多维数组的简单方法。使用 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++;
}
备注:
你要提前知道数组的维度
要使用多行在 omnetpp.ini
中写入字符串参数,您应该在每一行的末尾放置反斜杠,但最后一行除外,例如:
**.setGate = "true true false,\
false false false"
我设法从 omnetpp.ini 中将一个向量作为字符串输入并用作 bool,如下所示,
//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;
...
};
我在 Omnet++ 手册中没有找到任何允许我进行多维输入的东西,
//omnetpp.ini
**.setGate = "true false false false true false false,
false false false false false false false,
true false false false true false false"
我该如何克服这样的问题?
没有读取多维数组的简单方法。使用 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++;
}
备注:
你要提前知道数组的维度
要使用多行在
omnetpp.ini
中写入字符串参数,您应该在每一行的末尾放置反斜杠,但最后一行除外,例如:**.setGate = "true true false,\ false false false"