ISO C ++ запрещает сравнение между указателем и целым числом [-fpermissive] [c ++] - PullRequest
0 голосов
/ 17 января 2020

ISO C ++ запрещает сравнение между указателем и целым числом [-fpermissive]

      if(S[i] == "#")
                 ^~~ 
#include <iostream>
using namespace std;

int main() {
    string S = "a#b#";
    for( int i=0; i< S.length(); i++){
        if(S[i] == "#")
            //do somethng
    }
    return 0;
}

При поиске этой ошибки я нашел обходной путь, используя '&', как в if( &S[i] == "#"), и это работает хорошо. Может кто-нибудь объяснить мне, почему это работает, что здесь происходит?

Ответы [ 2 ]

4 голосов
/ 17 января 2020

Вы перебираете символы, но сравниваете символ (char) с (const char *).

Вы должны сравнивать его с символом '#'.

#include <iostream>
using namespace std;

int main() {
    string S = "a#b#";
    for( int i=0; i< S.length(); i++){
        if(S[i] == '#') // here <--
            //do somethng
    }
    return 0;
}

Вы можете упростить это до диапазона, основанного на l oop:

#include <iostream>
using namespace std;

int main() {
    string S = "a#b#";
    for(char character : S){
        if(character == '#')
            //do somethng
    }
    return 0;
}
0 голосов
/ 17 января 2020

& S [i] == "#" не то же самое, что s [i] == '#', так как предыдущий сравнивает адрес указателя, который он оценивает как ложный.

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