2016-12-02 114 views
0

我有兩個char數組(都[10] [10]),我想比較第一個數組中的每個元素與另一箇中的相同元素,並返回1(如果它們相似)。 陣列:比較兩個char多維數組

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和我沒有更多的想法如何解決它。也許這是人誰編寫了很多顯而易見的,但我不是其中之一..

+0

你的函數返回類型是'bool',但它什麼也沒有返回。 – GoodDeeds

+0

您不會將單個字符與'strcmp'進行比較,只需使用==。 'if(task [i] [j] == solution [i] [j])''。編輯:對不起,只是錯誤地複製你的原件! –

+0

嘗試一下,但仍然無法正常工作,所以我不確定這種比較兩個字符的方法是否正確。如果是這樣,我會繼續在代碼中尋找邏輯錯誤 – skarpet

回答

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; 
} 

此外,你不必迭代到最後,因爲它停在第一個mismatch。

+0

謝謝,它完美的作品 – skarpet

0

@GoodDeeds @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; 
} 

那是正確的(我的意思代碼,而不是邏輯,是否按預期工作)?

+0

它只檢查數組中的最後一個char [9] [9],因爲每次迭代都會覆蓋「result」。 – izlin

0

使用標準算法儘可能(這意味着總是):

#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); 
}