【发布时间】:2021-08-23 14:48:09
【问题描述】:
我已经解决这个问题几天了,希望得到一些指导。
假设我有一个字符串向量“myVec”,它的定义如下:
(请注意,这些只是向量“内部”的值,我使用 push_back 函数将 myVec 定义如下):
myVec[0] = X Y 2 //There is a distance of 2 units between 'X' and 'Y'
myVec[1] = X Zebra 9 //There is a distance of 9 units between 'X' and 'Zebra'
myVec[2] = Y Zebra 3 //There is a distance of 3 units between 'Y' and 'Zebra'
我还能够将这些“位置”(X、Y 和 Zebra)保存在一个称为“路由器”的字符串向量中,这样:
routers[0] = X
routers[1] = Y
routers[2] = Zebra
我想创建一个基于“myVec”的“成本”矩阵,格式为:
0 2 9
2 0 3
9 3 0
每一行和每一列都代表位置,“X”、“Y”和“斑马”。在第一行中,它说:“X”到“X”需要 0 个单位,“X”需要 2 个单位才能到达 Y',“X”需要 9 个单位才能到达“斑马'。以此类推。下一行与位置“Y”相同,最后一行与位置“Zebra”相同
我创建成本矩阵的第一步是检索距离值(在本例中:2、9 和 3)
我创建了一些代码,以便我可以看到来自“myVec”的距离值,如下所示:
for (int i = 0; i <myVec.size(); i++)
{
string s = myVec.at(i);
for (int j = 0; j <s.length(); j++) //going through chars of string in 'myVec' vec
{
if (isdigit(s[j])) //Going through myVec vector, and checking the numerical distance value
{
int dist = s[j] - '0'; //Converting the char to int
cout<<dist<<endl;
}
}
}
上面的代码打印了 myVec - 2 9 和 3 的数值。但是,这是我一直卡住的地方,因为我正在努力编写代码应该如何/在哪里保存这些距离值。距离“2”是位置“X”和“Y”之间的距离,因此在成本矩阵中它应该存储在位置 [0][1] 和 [1][0] 中。除了,我真的很难弄清楚如何在代码中实现这一点。我考虑过使用比较来使用 .at() 函数循环遍历 myVec,并将它们与保存在“路由器”向量中的位置进行比较,但是这种策略在考虑位置'Zebra'时就失败了,它不是一个字符,而是一个字符串......
我真的很感激一些想法! 谢谢。
【问题讨论】:
-
myVec[0] = X Y 2不是 C++。请创建一个合适的minimal reproducible example -
您好!抱歉,我刚刚编辑了我的问题。我确实使用 push_back() 来定义我的向量,但我只是对向量进行了索引,以便能够传达在这些向量位置保存的值。
-
索引不是问题。问题是我们不知道向量的类型,我们不知道
X Zebra 9是什么,因为它不是有效的C++ 代码。我们无法猜测,因为那会浪费我们俩的时间。请创建一个minimal reproducible example。
标签: c++ string vector multidimensional-array