-2

我有这个数组:

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。

4

4 回答 4

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这里使用它们是完全可以接受的。

如果您仍然坚决认为永远不能使用 a goto,则可以将其伪装成 a 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);
}
于 2013-11-13T17:15:19.853 回答
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
于 2013-11-13T17:20:32.320 回答
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。

于 2013-11-13T17:07:29.573 回答
0
while ((g[p1][p2] != -2) && (p1 < 9) && (p2 < 9))
{
    if (p2 == 8){
       p1++;
    }
    else p2++;
}

首先,您的代码是错误的,因为您使用的是=运算符。= 运算符用于将值分配给变量,在这种情况下您应该使用的运算符是==表示同情。

此外,您应该检查直到 8,因为 c++ 中的数组从 0 开始。

于 2013-11-13T17:30:16.580 回答