我有这个数组:
000000000
000000000
00-2000000
000000000
000000000
000000000
000000000
00000-2000
000000000
我想要做的是从左到右,在每一行中找到第一个出现的 '-2'。我不想打印任何其他人。
我试过这样,但它不能正常工作
while ((g[p1][p2] != -2) && (p1 < 9) && (p2 < 9))
{
if (p2 = 9) p1++;
else p2++;
}
这是一个9x9数组,我正在搜索第一个-2。
答案 0 :(得分:3)
这是执行此操作的正确方法:
int p1, p2; //must be declared outside loop, otherwise they get deleted when it ends.
for(p1 = 0; p1 < 9; p1++)
for(p2 = 0; p2 < 9; p2++)
if(g[p1][p2] == -2) goto doneSearching;
doneSearching:
你所有goto
仇恨者现在都会抱怨你永远不会使用goto
。你还是错的。像这样的情况是语言完全goto
的原因之一,并且它们完全可以在这里使用。
如果你仍然坚决,你永远不会使用goto
,你可以将它作为return
将其移到一个单独的函数中来解雇它,如下所示:
template<typename E>
Pair<int, int> search(E[][] array, E target){
for(int p1 = 0; p1 < sizeof(array)/sizeof(*array); p1++)
for(int p2 = 0; p2 < sizeof(array[p1])/sizeof(*array[p1]); p2++)
if(target == array[p1][p2]) return Pair<int, int>(p1,p2);
}
答案 1 :(得分:1)
将if (p2 = 9) p1++;
更改为if (p2 == 8) p1++;
while ((g[p1][p2] != -2) && (p1 < 9) && (p2 < 9))
{
if (p2 == 8) {
p1++;
p2=0;
}
else p2++;
}
如果p2的最后位置以0开头,则应为8。
答案 2 :(得分:1)
由于您标记了C ++,为什么不执行以下操作:
#include <iostream>
#include <string>
#include <vector>
int main(int argc, const char * argv[])
{
std::vector<std::string> rowStr;
// Import your data however you need to, below is just for example
rowStr.push_back("000000000");
rowStr.push_back("000000000");
rowStr.push_back("00-2000000");
rowStr.push_back("000000000");
rowStr.push_back("000000000");
rowStr.push_back("000000000");
rowStr.push_back("00000-2000");
rowStr.push_back("000000000");
std::string subString("-2");
for (size_t r = 0; r < rowStr.size(); r++) {
std::string binaryStr = rowStr.at(r);
if (binaryStr.find(subString) != std::string::npos) {
size_t c = binaryStr.find(subString);
std::cout << "row = " << r << "; col = " << c << std::endl;
}
}
return 0;
}
然后输出:
row = 2; col = 2
row = 6; col = 5
答案 3 :(得分:0)
while ((g[p1][p2] != -2) && (p1 < 9) && (p2 < 9))
{
if (p2 == 8){
p1++;
}
else p2++;
}
首先,您的代码是错误的,因为您使用的是=
运算符。 =运算符是为变量赋值,在这种情况下你应该使用的运算符是==
,这意味着同情。
此外,您应该检查到8,因为c ++中的数组从0开始。