【问题标题】:Comparing two char multidimension arrays比较两个 char 多维数组
【发布时间】:2016-12-02 14:29:47
【问题描述】:

我有两个 char 数组(都是 [10][10]),我想将第一个数组中的每个元素与另一个数组中的相同元素进行比较,如果它们相似则返回 1。 数组:

char task [10][10] = {
{ ' ', ' ', ' ', ' ', ' ', ' ',' ', ' ', ' ', ' ' },
{ ' ', ' ', ' ', ' ', ' ', ' ',' ', ' ', ' ', ' ' },
{ ' ', ' ', ' ', ' ', ' ', t,' ', ' ', ' ', ' ' },
{ ' ', ' ', ' ', t, ' ', ' ',t, ' ', ' ', ' ' },
{ ' ', ' ', t, t, t, t,t, t, ' ', ' ' },
{ ' ', ' ', t, ' ', ' ', ' ',' ', t, ' ', ' ' },
{ ' ', ' ', t, ' ', ' ', ' ',' ', t, ' ', ' ' },
{ ' ', ' ', t, ' ', ' ', ' ',' ', t, ' ', ' ' },
{ ' ', ' ', t, t, t, t,t, t, ' ', ' ' },
{ ' ', ' ', ' ', ' ', ' ', ' ',' ', ' ', ' ', ' ' },
};

char solution [10][10] = {
{ ' ', ' ', ' ', ' ', ' ', ' ',' ', ' ', ' ', ' ' },
{ ' ', ' ', ' ', ' ', ' ', ' ',' ', ' ', ' ', ' ' },
{ ' ', ' ', ' ', ' ', t, t,' ', ' ', ' ', ' ' },
{ ' ', ' ', ' ', t, ' ', ' ',t, ' ', ' ', ' ' },
{ ' ', ' ', t, t, t, t,t, t, ' ', ' ' },
{ ' ', ' ', t, ' ', ' ', ' ',' ', t, ' ', ' ' },
{ ' ', ' ', t, ' ', ' ', ' ',' ', t, ' ', ' ' },
{ ' ', ' ', t, ' ', ' ', ' ',' ', t, ' ', ' ' },
{ ' ', ' ', t, t, t, t,t, t, ' ', ' ' },
{ ' ', ' ', ' ', ' ', ' ', ' ',' ', ' ', ' ', ' ' },
};

其中 t: char t = -2; (归档广场) 我是这样尝试的:

bool cond (char task[10][10], char solution[10][10])
{
for (int i = 0; i < 10; i++)
{
    for (int j = 0; j < 10; j++)
    {
        if (strcmp(task[i][j], solution[i][j]))
    }
}
}

主要是:

do
{
XxX(zadanie);
wpisz(kolor,w1,w2,zadanie,t);
}
while (!cond(task,solution));
cout << "Solved";

但它不起作用,从 char 转换为 *char 存在一些问题,我不知道如何解决它。可能对于编写很多代码的人来说很明显,但我不是其中之一..

【问题讨论】:

  • 你的函数返回类型是bool,但它什么也没返回。
  • 您不要将单个字符与strcmp 进行比较,只需使用==if (task[i][j] == solution [i][j])。编辑:对不起,只是错误地复制了您的原件!
  • 也在尝试,但仍然无法正常工作,所以我不确定这种比较两个字符的方式是否正确。如果是我会继续寻找代码中的逻辑错误

标签: c++ arrays char compare


【解决方案1】:

@skarpet 您的答案将覆盖每次迭代的结果。试试这样的:

bool warunek (char task[10][10], char solution[10][10])
{
for (int i = 0; i < 10; i++)
{
    for (int j = 0; j < 10; j++)
    {
        if (task[i][j] != solution [i][j])
        {
            return false;
        }
    }
}
return true;
}

此外,您不必迭代到最后,因为它会在第一次不匹配时停止。

【讨论】:

    【解决方案2】:

    @GoodDeeds @善行 对了,我贴错了代码:

    bool warunek (char task[10][10], char solution[10][10])
    {
    int result = 0;
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            if (task[i][j] == solution [i][j])
            {
                result= 0;
            } else
            {
                result= 1;
            }
        }
    }
    return result;
    }
    

    正确吗(我的意思是代码,而不是逻辑,它是否按预期工作)?

    【讨论】:

    • 它只检查数组中的最后一个字符 [9][9],因为每次迭代都会覆盖“结果”。
    【解决方案3】:

    尽可能使用标准算法(这意味着总是):

    #include <algorithm>
    #include <iterator>
    
    
    bool matches_solution(char (&candidate)[10][10], char (&solution)[10][10])
    {
      auto row_same = [](char (&l)[10], char (&r)[10])
      {
        return std::equal(std::begin(l), std::end(l),
                          std::begin(r));
      };
    
      return std::equal(std::begin(candidate), std::end(candidate),
                        std::begin(solution), row_same);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-17
      • 1970-01-01
      相关资源
      最近更新 更多