[Error] ISO C++ forbids comparison between pointer and integer [-fpermissive]



  • Hallo,
    Wie ihr in der Überschrift schon seht bekomme ich diesen Fehler angezeigt.

    #include <string>
    using namespace std;
    
    int iVarlength = line.length();
    int ivar;
    for(ivar=0;ivar <= iVarlength;ivar++){
    
    	if(line[ivar]=="v"||line[ivar]=="V"){
    
    		if(line[ivar+1]=="a"||line[ivar+1]=="A"){
    
    			if(line[ivar+2]=="r"||line[ivar+2]=="R"){
    			cout << ivar;
    			}
    		}
    	}
    }
    

    In allen IF Bedingungen wird der Fehler angezeigt.
    Bitte um Hilfe.



  • "A" ist ein String, äquivalent zu {'A', '\0'}. char bekommt man so: 'c'.
    Und btw, schon mal ne negative Länge gesehen? Nein? Dann nimm size_t.



  • cooky451 schrieb:

    Und btw, schon mal ne negative Länge gesehen? Nein? Dann nimm size_t.

    Wenn schon ordentlich, dann std::string::size_type .



  • Sone schrieb:

    cooky451 schrieb:

    Und btw, schon mal ne negative Länge gesehen? Nein? Dann nimm size_t.

    Wenn schon ordentlich, dann std::string::size_type .

    decltype(line)::size_type



  • Kellerautomat schrieb:

    Sone schrieb:

    cooky451 schrieb:

    Und btw, schon mal ne negative Länge gesehen? Nein? Dann nimm size_t.

    Wenn schon ordentlich, dann std::string::size_type .

    decltype(line)::size_type

    decltype(line.length())

    Edit: Das kann doch nicht wahr sein, zu was artet das hier aus? Böser Sone, pfui.



  • Sone schrieb:

    decltype(line.length())

    Edit: Das kann doch nicht wahr sein, zu was artet das hier aus? Böser Sone, pfui.

    Gratulation, du hast eine Variante gefunden, die schon mit std::vector<char> nicht mehr geht. Da ist selbst int besser.

    Btw: auto


  • Mod

    car schrieb:

    Sone schrieb:

    decltype(line.length())

    Edit: Das kann doch nicht wahr sein, zu was artet das hier aus? Böser Sone, pfui.

    Gratulation, du hast eine Variante gefunden, die schon mit std::vector<char> nicht mehr geht. Da ist selbst int besser.

    Hier wird die Existenz von length an den Container gefordert, insofern hat er schon Recht.

    Besser wäre es natürlich, wenn man diese Forderung abschaffen würde. Für den gezeigten Algorithmus braucht es bloß einen random access Iterator, keinen Container mit length. Man könnte es aber auch leicht auf einen allgemeinen Inputiterator umschreiben.

    edit: Wozu umschreiben? Der Algorithmus ist eigentlich ein schlechtes std::search. Man muss bloß eine Vergleichsfunktion benutzen, die die Groß- und Kleinschreibung missachtet.
    http://www.cplusplus.com/reference/algorithm/search/

    edit: std::search braucht einen forward Iterator. Sollte kein zu großes Hindernis sein.



  • SeppJ schrieb:

    edit: Wozu umschreiben? Der Algorithmus ist eigentlich ein schlechtes std::search.

    Trotzdem mag ich lieber strstr. Das ist in den meisten Implementierungen O(n+m) anstatt O(n*m) wie std::search.


Anmelden zum Antworten