Seite 1 von 2 12 Letzte »
Ergebnis 1 bis 20 von 21

[C++] String auf Leerzeichen überprüfen

  1. #1 Zitieren
    Knight Avatar von Kalkihe
    Registriert seit
    Jan 2008
    Ort
    Kerlsruhe
    Beiträge
    1.582
    Mein String darf kein leerzeichen enthalten. Da ich jetzt keine vorhandene Methode aus <string> gefunden hab, wollt ich das geschwind selber schreiben. Sieht jetzt so aus:

    Code:
    bool parseString(string s){
        unsigned int i=0;
        bool stringOkay=true;
        while (i < s.length()){
            if(s[i]== ' ')
                stringOkay=false;
            ++i;
        }
        return stringOkay;
    }
    Sprache ist C++. Wenn ich statt dem ' ' ein 'A' schreibe und das probiere, funktionierts. Aber Leerzeichen scheint er nicht richtig zu erkennen.
    Halp.
    Zitat Zitat von Matteo Beitrag anzeigen
    Gewagte These: Ein Bewohner von Kalkihes Wohnheim arbeitet offensichtlich in Professor Hunts Unternehmen.
    Kalkihe ist offline

  2. #2 Zitieren

    Batmanistrator
    Avatar von Thoronador
    Registriert seit
    Jul 2005
    Ort
    Morrowind, Vvardenfell-Distrikt
    Beiträge
    20.799
    Kannst du auch kürzer schreiben:
    Code:
    bool parseString(const std::string& s){
        return (s.find(' ')==std::string::npos);
    }
    Thoronador ist offline

  3. #3 Zitieren
    Lehona ist offline

  4. #4 Zitieren
    Pretty Pink Pony Princess  Avatar von Multithread
    Registriert seit
    Jun 2010
    Ort
    Crystal Empire
    Beiträge
    11.310
    Zitat Zitat von Thoronador Beitrag anzeigen
    Kannst du auch kürzer schreiben:
    Code:
    bool parseString(const std::string& s){
        return (s.find(' ')==std::string::npos);
    }
    /dies

    aber so:
    Code:
    std::replace( s.begin(), s.end(), " ", "");
    Danach ist dein String ok
    [Bild: AMD_Threadripper.png] Bei Hardware gibt es keine eigene Meinung, bei Hardware zählen nur die Fakten.


    Probleme mit der Haarpracht? Starres Haar ohne Glanz? TressFX schafft Abhilfe. Ja, TressFX verhilft auch Ihnen zu schönem und Geschmeidigen Haar.
    [Bild: i6tfHoa3ooSEraFH63.png]
    Multithread ist offline

  5. #5 Zitieren
    Knight Avatar von Kalkihe
    Registriert seit
    Jan 2008
    Ort
    Kerlsruhe
    Beiträge
    1.582
    Zitat Zitat von Thoronador Beitrag anzeigen
    Kannst du auch kürzer schreiben:
    Code:
    bool parseString(const std::string& s){
        return (s.find(' ')==std::string::npos);
    }
    Funktioniert leider genauso wenig... Der bricht mit dem Prüfen nach oder bei einem Leerzeichen ab hab ich das Gefühl, wenn ich ein P oder so einsetze und dann in der Konsole "Hallo P" eingebe, meint er auch keinen Fehler zu finden. Bei meiner und deiner Variante
    Zitat Zitat von Lehona Beitrag anzeigen
    Hab ich auch schon gefunden, bin nur nicht so zurecht gekommen damit, ich schaus mir wohl nochmal an

    @Lara Croft: Ich will es ja nur überprüfen, nicht korrigieren, das ist nicht verlangt.
    Zitat Zitat von Matteo Beitrag anzeigen
    Gewagte These: Ein Bewohner von Kalkihes Wohnheim arbeitet offensichtlich in Professor Hunts Unternehmen.
    Kalkihe ist offline

  6. #6 Zitieren
    Pretty Pink Pony Princess  Avatar von Multithread
    Registriert seit
    Jun 2010
    Ort
    Crystal Empire
    Beiträge
    11.310
    Zitat Zitat von Kalkihe Beitrag anzeigen
    Funktioniert leider genauso wenig... Der bricht mit dem Prüfen nach oder bei einem Leerzeichen ab hab ich das Gefühl, wenn ich ein P oder so einsetze und dann in der Konsole "Hallo P" eingebe, meint er auch keinen Fehler zu finden. Bei meiner und deiner Variante


    Hab ich auch schon gefunden, bin nur nicht so zurecht gekommen damit, ich schaus mir wohl nochmal an

    @Lara Croft: Ich will es ja nur überprüfen, nicht korrigieren, das ist nicht verlangt.
    geht aber einfacher

    ausserdem: die funktion von Thoronador sollte funktionieren, zumindest so weit mein C++ geht.

    Find schon mal mit " " Probiert? also anstelle von ' '.
    [Bild: AMD_Threadripper.png] Bei Hardware gibt es keine eigene Meinung, bei Hardware zählen nur die Fakten.


    Probleme mit der Haarpracht? Starres Haar ohne Glanz? TressFX schafft Abhilfe. Ja, TressFX verhilft auch Ihnen zu schönem und Geschmeidigen Haar.
    [Bild: i6tfHoa3ooSEraFH63.png]
    Multithread ist offline

  7. #7 Zitieren
    Knight Avatar von Kalkihe
    Registriert seit
    Jan 2008
    Ort
    Kerlsruhe
    Beiträge
    1.582
    Zitat Zitat von Lara Croft Beitrag anzeigen
    geht aber einfacher

    ausserdem: die funktion von Thoronador sollte funktionieren, zumindest so weit mein C++ geht.

    Find schon mal mit " " Probiert? also anstelle von ' '.
    Hab ich gerade ausprobiert, geht nicht. "P" dagegen funktioniert, analog zu oben.
    Zitat Zitat von Matteo Beitrag anzeigen
    Gewagte These: Ein Bewohner von Kalkihes Wohnheim arbeitet offensichtlich in Professor Hunts Unternehmen.
    Kalkihe ist offline

  8. #8 Zitieren
    Held Avatar von Lolomoloko
    Registriert seit
    Aug 2006
    Ort
    ~/
    Beiträge
    5.700
    Zitat Zitat von Kalkihe Beitrag anzeigen
    Mein String darf kein leerzeichen enthalten. Da ich jetzt keine vorhandene Methode aus <string> gefunden hab, wollt ich das geschwind selber schreiben. Sieht jetzt so aus:

    Code:
    bool parseString(string s){
        unsigned int i=0;
        bool stringOkay=true;
        while (i < s.length()){
            if(s[i]== ' ')
                stringOkay=false;
            ++i;
        }
        return stringOkay;
    }
    Sprache ist C++. Wenn ich statt dem ' ' ein 'A' schreibe und das probiere, funktionierts. Aber Leerzeichen scheint er nicht richtig zu erkennen.
    Halp.
    nur als tipp für die zukunft.
    es ist hinreichend ein leerzeichen in dem string zu finden. bei dem von dir geposteten code wird also zuviel arbeit vorgenommen.
    also angenommen dein string umfasst ein ganzen buch, so würde er das ganze buch durchsuchen obwohl er vermutlich schon nach ~5 zeichen ein leerzeichen findet.

    und c++ spezifisch: du willst den string in der funktion nicht verändern und du willst ihn vermutlich auch nicht kopieren, also bietet sich eine const reference an.
    je mehr const kram du hast je besser kann der compiler optimieren.

    Code:
    bool parseString(const string& s){
        for(int i=0; i < s->length; i++){
            if(s->at(i) == ' ')
                return false;
        }
        return true;
    }
    aber das von thoro vorgeschlagene find sollte trotzdem tolliger sein, das nur so als beispiel (und ich bin grad auch nicht sicher ob sich der string da nicht "auto" dereferenziert ).

    //edith
    hab nachgeschaut, [] ist überladen
    Lolomoloko ist offline Geändert von Lolomoloko (25.11.2013 um 18:01 Uhr)

  9. #9 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.466
    [] ist überladen für Strings.
    Lehona ist offline

  10. #10 Zitieren
    Held Avatar von Lolomoloko
    Registriert seit
    Aug 2006
    Ort
    ~/
    Beiträge
    5.700
    Zitat Zitat von Lehona Beitrag anzeigen
    [] ist überladen für Strings.
    zu langsam mim editiern gewesen
    Lolomoloko ist offline

  11. #11 Zitieren
    Knight Avatar von Kalkihe
    Registriert seit
    Jan 2008
    Ort
    Kerlsruhe
    Beiträge
    1.582
    Zitat Zitat von Lolomoloko Beitrag anzeigen
    nur als tipp für die zukunft.
    es ist hinreichend ein leerzeichen in dem string zu finden. bei dem von dir geposteten code wird also zuviel arbeit vorgenommen.
    also angenommen dein string umfasst ein ganzen buch, so würde er das ganze buch durchsuchen obwohl er vermutlich schon nach ~5 zeichen ein leerzeichen findet.

    und c++ spezifisch: du willst den string in der funktion nicht verändern und du willst ihn vermutlich auch nicht kopieren, also bietet sich eine const reference an.
    je mehr const kram du hast je besser kann der compiler optimieren.

    und dann: wenn du std::string verwendest bin ich mir nicht sicher ob der zugriff über ne adressverschiebung ohne iteratror (also das s[i]) funktioniert (ka ob der operator überladen ist und zu faul nachzuschauen)
    Code:
    bool parseString(const string& s){
        for(int i=0; i < s->length; i++){
            if(s->at(i) == ' ')
                return false;
        }
        return true;
    }
    aber das von thoro vorgeschlagene find sollte trotzdem tolliger sein, das nur so als beispiel (und ich bin grad auch nicht sicher ob sich der string da nicht "auto" dereferenziert ).
    Weißt du was? Genau wegen sowas hasse ich meine Dozentin. Wir hatten natürlich call-by-reference und auch const schon, aber dass man das dermaßen mit so einem Nutzen kombinieren kann, sagt einem natürlich niemand. Danke für den Tipp.

    Stimmt, der macht zu viel Arbeit. Das wollte ich eigentlich auch eh anders lösen, also dass er beim ersten Leerzeichen rausspringt, habs dann nur irgendwie umgemodelt.

    Hm, okay. Jedenfalls funktioniert die Funktion so mit jedem Zeichen, außer dem Leerzeichen.
    Zitat Zitat von Matteo Beitrag anzeigen
    Gewagte These: Ein Bewohner von Kalkihes Wohnheim arbeitet offensichtlich in Professor Hunts Unternehmen.
    Kalkihe ist offline

  12. #12 Zitieren
    Held Avatar von Lolomoloko
    Registriert seit
    Aug 2006
    Ort
    ~/
    Beiträge
    5.700
    hmm, also bei mir passt das so

    Code:
    #include <string>
    #include <iostream>
    
    using namespace std;
    
    bool containsNoSpaces(const string& s){
        for(int i=0; i < s.length(); i++){
            if(s.at(i) == ' ')
                return false;
        }
        return true;
    }
    
    int main(){
        string s0("foo bar");
        string s1("foobar");
    
        if(!containsNoSpaces(s0) && containsNoSpaces(s1))
            cout << "passt so" << endl;
    }
    Lolomoloko ist offline

  13. #13 Zitieren
    Knight Avatar von Kalkihe
    Registriert seit
    Jan 2008
    Ort
    Kerlsruhe
    Beiträge
    1.582
    Ah, das ist mal wieder sone Sache. So wie die Konsole die Eingabe von leeren Strings nicht erkennt, erkennt sie wohl auch keine Leerzeichen. Habs gerade mit Eingabe im Programm probiert, und das funktioniert natürlich. Grml, das hätt ich eigentlich wissen müssen, sowas gabs schonmal bei ner änlichen Aufgabe.
    Zitat Zitat von Matteo Beitrag anzeigen
    Gewagte These: Ein Bewohner von Kalkihes Wohnheim arbeitet offensichtlich in Professor Hunts Unternehmen.
    Kalkihe ist offline

  14. #14 Zitieren

    Batmanistrator
    Avatar von Thoronador
    Registriert seit
    Jul 2005
    Ort
    Morrowind, Vvardenfell-Distrikt
    Beiträge
    20.799
    Zitat Zitat von Kalkihe Beitrag anzeigen
    Ah, das ist mal wieder sone Sache. So wie die Konsole die Eingabe von leeren Strings nicht erkennt, erkennt sie wohl auch keine Leerzeichen. Habs gerade mit Eingabe im Programm probiert, und das funktioniert natürlich.
    [Bild: facepalm.gif]

    Bei Eingabe über die Konsole wird einfach angenommen, dass nach dem Leerzeichen eine neue Eingabe kommt, und diese wird dann einfach dem nächsten Wert zugewiesen (oder im Puffer gehalten). Kleines Beispielprogramm:

    Code:
    #include <iostream>
    #include <vector>
    
    int main()
    {
        std::vector<std::string> nichtDieListe;
    
        std::string input;
        unsigned int i;
        for (i=0; i<4; ++i)
        {
            std::cin >> input;
            nichtDieListe.push_back(input);
            std::cout << "Listenwert " << i << ": '" << nichtDieListe[i] << "'\n";
        }
    
        return 0;
    }
    Gibt man dort bei der ersten Eingabemöglichkeit "Dies ist ein Test." ein, dann sieht das so aus:

    [Bild: DiesisteinTest.png]

    Wenn du deine Eingaben auch in dem Stil über std::cin und den >>-Operator machst, kann das nichts werden, denn das Leerzeichen ist dort Trennzeichen. Ergo werden auch nie Leerzeichen in deinen eingegebenen Strings vorkommen.
    Thoronador ist offline

  15. #15 Zitieren
    Knight Avatar von Kalkihe
    Registriert seit
    Jan 2008
    Ort
    Kerlsruhe
    Beiträge
    1.582
    Zitat Zitat von Thoronador Beitrag anzeigen
    Chill, ich sag ja, unsere Dozenten sind nich so bombe und sowas wurde ja auch nie angesprochen. Wenn du die Folien sehen würdest, wüsstest du ungefähr womit ich mich hier quälen muss. Da ist es echt gut, Leute wie euch zu haben die einem solche fundamentalen Dinge auch noch gut veranschaulichen können. Tja, ohne Eigeninitiative komm ich bei der VL nicht weit.

    Das Beispiel ist ja mal voll toll, ich erlaub mir das mal zu speichern und bei Bedarf weiter zu geben, ja?
    Zitat Zitat von Matteo Beitrag anzeigen
    Gewagte These: Ein Bewohner von Kalkihes Wohnheim arbeitet offensichtlich in Professor Hunts Unternehmen.
    Kalkihe ist offline

  16. #16 Zitieren

    Batmanistrator
    Avatar von Thoronador
    Registriert seit
    Jul 2005
    Ort
    Morrowind, Vvardenfell-Distrikt
    Beiträge
    20.799
    Zitat Zitat von Kalkihe Beitrag anzeigen
    Das Beispiel ist ja mal voll toll, ich erlaub mir das mal zu speichern und bei Bedarf weiter zu geben, ja?
    Von mir aus gern.
    Wenn man allerdings eine Zeichenkette eingibt, die in weniger als vier Teile aufgeteilt wird (z.B. weil sie keine Leerzeichen hat), dann muss man bei dem Programm so lange etwas eingeben, bis man in der Summe vier "Eingaben" hat. Das wäre z.B. der Fall, wenn man zweimal "Hallo Welt!" eingibt.
    Thoronador ist offline

  17. #17 Zitieren
    Dea
    Registriert seit
    Aug 2005
    Beiträge
    13.540
    hat es eigentlich bemerkenswerte vorteile, echte referenzen zu übergeben? ich bins halt aus c gewohnt, das mit pointern zu machen...
    Dark_Tengulist ist offline

  18. #18 Zitieren
    Drachentöter Avatar von Domingo
    Registriert seit
    Jul 2005
    Beiträge
    4.193
    Kurze Frage, da ich es bisher noch nicht in einer Referenz gefunden habe:
    ">>" angewendet auf Eingabestreams liest bis zum nächsten Trennzeichen (' ', '\n', EOF, etc...), schmeißt allerdings letzteres nicht raus und setzt auch nicht die EOF-Flag, wenn das Trennzeichen EOF ist, oder?

    Domingo ist offline

  19. #19 Zitieren
    Held Avatar von Lolomoloko
    Registriert seit
    Aug 2006
    Ort
    ~/
    Beiträge
    5.700
    Zitat Zitat von Thnallgzt Beitrag anzeigen
    hat es eigentlich bemerkenswerte vorteile, echte referenzen zu übergeben? ich bins halt aus c gewohnt, das mit pointern zu machen...
    eine referenz ist ja nichts anderes als ein const zeiger (und der hübscheren zugriffsmöglichkeiten)
    Lolomoloko ist offline

  20. #20 Zitieren
    Ritter Avatar von ojas
    Registriert seit
    Jun 2008
    Ort
    Erde
    Beiträge
    1.787
    Zitat Zitat von Thnallgzt Beitrag anzeigen
    hat es eigentlich bemerkenswerte vorteile, echte referenzen zu übergeben? ich bins halt aus c gewohnt, das mit pointern zu machen...
    Zeiger dürfen 0 sein. Wenn ein Zeiger 0 ist, dann darf er nicht dereferenziert werden. Das musst du irgendwie sicherstellen, oft durch zusätzlichen Quelltext. Bei Referenzen gibt es nichts dem Nullzeiger vergleichbares.
    ojas ist offline

Seite 1 von 2 12 Letzte »

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •