automatische Satzzeichen setzen



  • This post is deleted!

  • Mod

    Deine Probleme haben nichts mit deiner Frage zu tun. "hallo.exe" ist äquivalent zu "./hallo.exe" was Dateinamen angeht. Dein Code ist bloß total falsch:

    ifstream name();
    

    Das ist eine Funktionsdeklaration für eine Funktion namens name, die keine Parameter hat und einen ifstream zurück gibt. Das nachfolgende
    if (name) macht entsprechend auch nicht, was du denkst.



  • @SeppJ
    Wie ist eigentlich der kürzeste Weg, wenn man tatsächlich etwas davor setzten möchte?

    Bei mir ensteht da immer sowas:

    std::string str;
    std::cin >> str;
    str.insert(0, "./");
    

    oder

    std::string temp;
    std::cin >> temp;
    std::string str { "./" + temp };
    


  • @Zhavok sagte in automatische Satzzeichen setzen:

    Wie ist eigentlich der kürzeste Weg, wenn man tatsächlich etwas davor setzten möchte?

    Definiere die Metrik, mit welcher du "kurz" messen willst. Wenn du die Anzahl der Zeichen des Quellcodes meinst, ist deine untere Variante schon mal länger als die obere 🙂

    Die ursprüngliche Frage war ja, wie das automatisch vorgehängt wird. Man könnte mit den operator>> überladen. Aber ob das so standardkonform ist und ob man das machen will...

    Nicht nachmachen 😜:

    #include <iostream>
    #include <string>
    
    std::istream& operator>>(std::istream& in, std::string &s) {
        std::operator>>(in, s);
        s.insert(0, "./");
        return in;
    }
    
    int main() {
        std::string s;
        std::cin >> s;
        std::cout << s << '\n';
    }
    


  • @wob Ja, ich meinte kurz im Sinne von kurzen Quellcode. Ich hab überlegt obs da nen flinken Einzeiler dafür gibt.



  • @Zhavok s="./"+s; Das sind 9 Zeichen. Frage mich nur nach der Sinnhaftigkeit dieser Frage.



  • Das reicht mir doch als Antwort. Ich war mir nur nicht sicher ob ich immer einen Umweg gehe mit meinen Beispielen. Gracias.



  • @wob sagte in automatische Satzzeichen setzen:

    Aber ob das so standardkonform

    Ja, ist es.

    @Zhavok foo = "whatever" + foo;??



  • This post is deleted!


  • Ich bedanke mich für die Antworten und Hinweise 😃



  • @Zhavok
    Du hast doch selbst schon den Einzeiler gehabt?

    str.insert(0, "./");
    


  • Ja, aber ich hatte überlegt ob man den string mit."./" beginnen und das Einlesen kombiniert bekommt. Also den String mit "./" initialisieren und dem einfach die Eingabe anzuhängen. Ich wollte das hin und herrücken von insert() umgehen und auch nicht erst den string mit std::cin initialisieren um dann wieder hin und her zu schieben wie bei @wob und @Swordfish. Das fühlt sich für mich wie ein Umweg an und deshalb der Gedanke obs schneller geht. Ich denke ihr versteht was ich meine.


  • Mod

    @Zhavok sagte in automatische Satzzeichen setzen:

    Ja, aber ich hatte überlegt ob man den string mit."./" beginnen und das Einlesen kombiniert bekommt. Also den String mit "./" initialisieren und dem einfach die Eingabe anzuhängen. Ich wollte das hin und herrücken von insert() umgehen und auch nicht erst den string mit std::cin initialisieren um dann wieder hin und her zu schieben wie bei @wob und @Swordfish. Das fühlt sich für mich wie ein Umweg an und deshalb der Gedanke obs schneller geht. Ich denke ihr versteht was ich meine.

    Kannst du auch machen:

    string filename = "./";
    filename += *istream_iterator<string>(cin);
    

    Gute Idee? Zweifelhaft.



  • Ah interessant. Aber du hast verstanden, wie ichs gemeint hab 🙂


  • Mod

    Vielleicht ist dies eher die Richtung, an die du dachtest?

    char filename[2000] = "./";
    cin.getline(filename + 2, 1998);
    

    Hat ein bisschen weniger dynamische Stringmanipulation auf Kosten der Flexibilität, aber für Dateinamen sicher praktisch ausreichend.


Log in to reply