как поместить 2d строковый массив в if? - PullRequest
0 голосов
/ 14 февраля 2019

У меня проблема со сравнением строкового массива 2d с 'X' в операторе if

Я пытаюсь сравнить каждую ячейку в моем массиве с 'X', но я получаю "несоответствие" оператору =='ошибка в строке 14, поэтому я думаю, что у меня возникла проблема с размещением массива внутри этого оператора if

    #include <iostream>

    using namespace std;

    int main()
    {
        int n;
        cin >> n;
        string M[n][n];
        int k=0;
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
               cin>>M[i][j];
               if(M[i][j]=='X')
                   k++;
           }
       }

         cout<<k<<endl;

         return 0;
   }

ошибка в строке 14 "строка if", в которой говорится "нет совпадения для оператора =="ошибка

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

сначала объявите строковую переменную и присвойте "X", например.string s="X"; после этого сравните s с каждым индексом, например.if(M[i][j]==s)

код:

int main(){
int n;
    //here
    string s="X";
    cin >> n;
    string M[n][n];
    int k=0;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
         cin>>M[i][j];
         //here
         if(M[i][j]==s) 
           k++;
       }
   }
}
0 голосов
/ 14 февраля 2019

Это может быть неочевидно, если вы пришли из другого языка, например Python, но в C ++ существует существенная разница между использованием "" и '' для литеральных типов.Мы используем '' (одинарные кавычки) для типа char.Для типа std :: string (и других строк) мы используем "" для сравнения - это тоже ваш случай.

Поэтому в вашей строке:

if(M[i][j]=='X')

вам нужно использовать doubleкавычки "" для сравнения элемента из M со строкой:

if(M[i][j] == "X")

В качестве альтернативы, если вы храните только отдельные символы в каждой ячейке M, это может быть двумерный массив char s.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...